diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index b332f39..fe7f6c8 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,22 +1,10 @@
-// For format details, see https://aka.ms/devcontainer.json. For config options, see the
-// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
-{
- "name": "Ubuntu",
- // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
- "image": "mcr.microsoft.com/devcontainers/base:jammy"
-
- // Features to add to the dev container. More info: https://containers.dev/features.
- // "features": {},
-
- // Use 'forwardPorts' to make a list of ports inside the container available locally.
- // "forwardPorts": [],
-
- // Use 'postCreateCommand' to run commands after the container is created.
- // "postCreateCommand": "uname -a",
-
- // Configure tool-specific properties.
- // "customizations": {},
-
- // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
- // "remoteUser": "root"
-}
+{
+ "name": "C# Dev Container",
+ "image": "mcr.microsoft.com/dotnet/sdk:8.0",
+ "customizations": {
+ "vscode": {
+ "extensions": ["ms-dotnettools.csharp"]
+ }
+ },
+ "remoteUser": "root"
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..56d7e06
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,26 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ // Use IntelliSense to find out which attributes exist for C# debugging
+ // Use hover for the description of the existing attributes
+ // For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md
+ "name": ".NET Core Launch (console)",
+ "type": "coreclr",
+ "request": "launch",
+ "preLaunchTask": "build",
+ // If you have changed target frameworks, make sure to update the program path.
+ "program": "${workspaceFolder}/Async_Await/bin/Debug/net8.0/Async_Await.dll",
+ "args": [],
+ "cwd": "${workspaceFolder}/Async_Await",
+ // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
+ "console": "internalConsole",
+ "stopAtEntry": false
+ },
+ {
+ "name": ".NET Core Attach",
+ "type": "coreclr",
+ "request": "attach"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..637fb8b
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,41 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "build",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "build",
+ "${workspaceFolder}/CSharpProjekt.sln",
+ "/property:GenerateFullPaths=true",
+ "/consoleloggerparameters:NoSummary;ForceNoAlign"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "publish",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "publish",
+ "${workspaceFolder}/CSharpProjekt.sln",
+ "/property:GenerateFullPaths=true",
+ "/consoleloggerparameters:NoSummary;ForceNoAlign"
+ ],
+ "problemMatcher": "$msCompile"
+ },
+ {
+ "label": "watch",
+ "command": "dotnet",
+ "type": "process",
+ "args": [
+ "watch",
+ "run",
+ "--project",
+ "${workspaceFolder}/CSharpProjekt.sln"
+ ],
+ "problemMatcher": "$msCompile"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Async_Await/Async_Await.csproj b/Async_Await/Async_Await.csproj
index 2150e37..206b89a 100644
--- a/Async_Await/Async_Await.csproj
+++ b/Async_Await/Async_Await.csproj
@@ -1,10 +1,10 @@
-
-
-
- Exe
- net8.0
- enable
- enable
-
-
-
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Async_Await/Ex1.cs b/Async_Await/Ex1.cs
index 3163499..947e389 100644
--- a/Async_Await/Ex1.cs
+++ b/Async_Await/Ex1.cs
@@ -1,18 +1,18 @@
-using System;
-using System.Threading.Tasks;
-
-public class Ex1
-{
- public static async Task Run()
- {
- /* Example of async and await */
- Console.WriteLine("Start");
- await DoWorkAsync();
- Console.WriteLine("Finished");
- }
-
- private static async Task DoWorkAsync()
- {
- await Task.Delay(2000);
- }
+using System;
+using System.Threading.Tasks;
+
+public class Ex1
+{
+ public static async Task Run()
+ {
+ /* Example of async and await */
+ Console.WriteLine("Start");
+ await DoWorkAsync();
+ Console.WriteLine("Finished");
+ }
+
+ private static async Task DoWorkAsync()
+ {
+ await Task.Delay(2000);
+ }
}
\ No newline at end of file
diff --git a/Async_Await/Ex2.cs b/Async_Await/Ex2.cs
index 5015f33..562bd81 100644
--- a/Async_Await/Ex2.cs
+++ b/Async_Await/Ex2.cs
@@ -1,26 +1,26 @@
-using System;
-using System.Threading.Tasks;
-
-public class Ex2
-{
- public static async Task Run()
- {
- /* Example of Tasks, showcasing Ressource Efficency */
- var task1 = DoMoreWorkAsync("One");
- var task2 = DoMoreWorkAsync("Two");
- var task3 = DoMoreWorkAsync("Three");
-
- await task1;
- await task2;
- await task3;
- Console.WriteLine("Finished example showcasing resource efficency\n\n");
- }
-
- private static async Task DoMoreWorkAsync(string name)
- {
- Console.WriteLine($"Task {name} is being executed by Thread {Thread.CurrentThread.ManagedThreadId}");
- await Task.Delay(2000);
- Console.WriteLine($"Task {name} is done");
-
- }
+using System;
+using System.Threading.Tasks;
+
+public class Ex2
+{
+ public static async Task Run()
+ {
+ /* Example of Tasks, showcasing Ressource Efficency */
+ var task1 = DoMoreWorkAsync("One");
+ var task2 = DoMoreWorkAsync("Two");
+ var task3 = DoMoreWorkAsync("Three");
+
+ await task1;
+ await task2;
+ await task3;
+ Console.WriteLine("Finished example showcasing resource efficency\n\n");
+ }
+
+ private static async Task DoMoreWorkAsync(string name)
+ {
+ Console.WriteLine($"Task {name} is being executed by Thread {Thread.CurrentThread.ManagedThreadId}");
+ await Task.Delay(2000);
+ Console.WriteLine($"Task {name} is done");
+
+ }
}
\ No newline at end of file
diff --git a/Async_Await/Ex3.cs b/Async_Await/Ex3.cs
index b540922..44c7c8e 100644
--- a/Async_Await/Ex3.cs
+++ b/Async_Await/Ex3.cs
@@ -1,23 +1,23 @@
-using System;
-using System.Threading.Tasks;
-
-public class Ex3
-{
- public static async Task Run()
- {
- /* Example using a Task type */
- var lowerCaseString = "i want to be an upper case string";
- Console.WriteLine("main: " + lowerCaseString);
- var upperCaseString = await WorkOnStringAsync(lowerCaseString);
- Console.WriteLine("main: " + upperCaseString);
- }
-
- private static async Task WorkOnStringAsync(string s)
- {
- Console.WriteLine("Task: Async task started");
- Console.WriteLine("Task: Waiting for 2 sec");
- await Task.Delay(2000);
- Console.WriteLine("Task: Done waiting, returning the upper case string");
- return s.ToUpper();
- }
-}
+using System;
+using System.Threading.Tasks;
+
+public class Ex3
+{
+ public static async Task Run()
+ {
+ /* Example using a Task type */
+ var lowerCaseString = "i want to be an upper case string";
+ Console.WriteLine("main: " + lowerCaseString);
+ var upperCaseString = await WorkOnStringAsync(lowerCaseString);
+ Console.WriteLine("main: " + upperCaseString);
+ }
+
+ private static async Task WorkOnStringAsync(string s)
+ {
+ Console.WriteLine("Task: Async task started");
+ Console.WriteLine("Task: Waiting for 2 sec");
+ await Task.Delay(2000);
+ Console.WriteLine("Task: Done waiting, returning the upper case string");
+ return s.ToUpper();
+ }
+}
diff --git a/Async_Await/Ex4.cs b/Async_Await/Ex4.cs
index 7019055..6ffb1d1 100644
--- a/Async_Await/Ex4.cs
+++ b/Async_Await/Ex4.cs
@@ -1,28 +1,28 @@
-using System;
-using System.Threading.Tasks;
-
-public class Ex4
-{
- public static async Task Run()
- {
- /* Example working with Tasks and awaiting them later */
- var lowerCaseString = "i want to be an upper case string";
- Console.WriteLine("main: " + lowerCaseString);
- // Start the task but do not await yet
- Task upperCaseTask = WorkOnStringAsync(lowerCaseString);
- Console.WriteLine("main: WorkOnStringAsync has been called, doing other work...");
- // Now await the result
- Console.WriteLine("main: Now waiting for the result");
- var upperCaseString = await upperCaseTask;
- Console.WriteLine("main: " + upperCaseString);
- }
-
- private static async Task WorkOnStringAsync(string s)
- {
- Console.WriteLine("Task: Async task started");
- Console.WriteLine("Task: Waiting for 2 sec");
- await Task.Delay(2000);
- Console.WriteLine("Task: Done waiting, returning the upper case string");
- return s.ToUpper();
- }
+using System;
+using System.Threading.Tasks;
+
+public class Ex4
+{
+ public static async Task Run()
+ {
+ /* Example working with Tasks and awaiting them later */
+ var lowerCaseString = "i want to be an upper case string";
+ Console.WriteLine("main: " + lowerCaseString);
+ // Start the task but do not await yet
+ Task upperCaseTask = WorkOnStringAsync(lowerCaseString);
+ Console.WriteLine("main: WorkOnStringAsync has been called, doing other work...");
+ // Now await the result
+ Console.WriteLine("main: Now waiting for the result");
+ var upperCaseString = await upperCaseTask;
+ Console.WriteLine("main: " + upperCaseString);
+ }
+
+ private static async Task WorkOnStringAsync(string s)
+ {
+ Console.WriteLine("Task: Async task started");
+ Console.WriteLine("Task: Waiting for 2 sec");
+ await Task.Delay(2000);
+ Console.WriteLine("Task: Done waiting, returning the upper case string");
+ return s.ToUpper();
+ }
}
\ No newline at end of file
diff --git a/Async_Await/Ex5.cs b/Async_Await/Ex5.cs
index ac73a4f..69c150a 100644
--- a/Async_Await/Ex5.cs
+++ b/Async_Await/Ex5.cs
@@ -1,27 +1,27 @@
-using System;
-using System.Threading.Tasks;
-
-public class Ex5
-{
- public static async Task Run()
- {
- /* Example for Task Coordination using Task.WhenAll() */
- Random random = new();
- async Task<(int index, int waitingTime)> randomDelay(int index)
- {
- var waitingTime = random.Next(500, 2000);
- await Task.Delay(waitingTime);
- return (index, waitingTime);
- }
-
- var delayTask1 = randomDelay(1);
- var delayTask2 = randomDelay(2);
- var delayTask3 = randomDelay(3);
-
- await Task.WhenAll(delayTask1, delayTask2, delayTask3);
-
- Console.WriteLine($"Task {delayTask1.Result.index} had to wait for {delayTask1.Result.waitingTime} ms");
- Console.WriteLine($"Task {delayTask2.Result.index} had to wait for {delayTask2.Result.waitingTime} ms");
- Console.WriteLine($"Task {delayTask3.Result.index} had to wait for {delayTask3.Result.waitingTime} ms");
- }
-}
+using System;
+using System.Threading.Tasks;
+
+public class Ex5
+{
+ public static async Task Run()
+ {
+ /* Example for Task Coordination using Task.WhenAll() */
+ Random random = new();
+ async Task<(int index, int waitingTime)> randomDelay(int index)
+ {
+ var waitingTime = random.Next(500, 2000);
+ await Task.Delay(waitingTime);
+ return (index, waitingTime);
+ }
+
+ var delayTask1 = randomDelay(1);
+ var delayTask2 = randomDelay(2);
+ var delayTask3 = randomDelay(3);
+
+ await Task.WhenAll(delayTask1, delayTask2, delayTask3);
+
+ Console.WriteLine($"Task {delayTask1.Result.index} had to wait for {delayTask1.Result.waitingTime} ms");
+ Console.WriteLine($"Task {delayTask2.Result.index} had to wait for {delayTask2.Result.waitingTime} ms");
+ Console.WriteLine($"Task {delayTask3.Result.index} had to wait for {delayTask3.Result.waitingTime} ms");
+ }
+}
diff --git a/Async_Await/Ex6.cs b/Async_Await/Ex6.cs
index 4836a88..cafb699 100644
--- a/Async_Await/Ex6.cs
+++ b/Async_Await/Ex6.cs
@@ -1,27 +1,27 @@
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-
-public class Ex6
-{
- public static async Task Run()
- {
- /* Example for Task Coordination using Task.WhenAny() */
- Random random = new();
- async Task<(int index, int waitingTime)> randomDelay(int index)
- {
- var waitingTime = random.Next(500, 2000);
- await Task.Delay(waitingTime);
- return (index, waitingTime);
- }
-
- List> taskList = new();
- for (int i = 1; i < 10; i++)
- {
- var delayedTask = randomDelay(i);
- taskList.Add(delayedTask);
- }
- var fastestTask = await Task.WhenAny(taskList);
- Console.WriteLine($"The fastest task was Task {fastestTask.Result.index}. It took {fastestTask.Result.waitingTime} ms to complete.");
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+public class Ex6
+{
+ public static async Task Run()
+ {
+ /* Example for Task Coordination using Task.WhenAny() */
+ Random random = new();
+ async Task<(int index, int waitingTime)> randomDelay(int index)
+ {
+ var waitingTime = random.Next(500, 2000);
+ await Task.Delay(waitingTime);
+ return (index, waitingTime);
+ }
+
+ List> taskList = new();
+ for (int i = 1; i < 10; i++)
+ {
+ var delayedTask = randomDelay(i);
+ taskList.Add(delayedTask);
+ }
+ var fastestTask = await Task.WhenAny(taskList);
+ Console.WriteLine($"The fastest task was Task {fastestTask.Result.index}. It took {fastestTask.Result.waitingTime} ms to complete.");
+ }
+}
diff --git a/Async_Await/Program.cs b/Async_Await/Program.cs
index 463a035..5c13f1b 100644
--- a/Async_Await/Program.cs
+++ b/Async_Await/Program.cs
@@ -1,40 +1,40 @@
-
-using System;
-using System.Threading.Tasks;
-
-class Program
-{
- static async Task Main(string[] args)
- {
- if (args.Length == 0)
- {
- Console.WriteLine("Usage: dotnet run -- ex1|ex2|ex3|ex4|ex5|ex6");
- return;
- }
-
- switch (args[0].ToLower())
- {
- case "ex1":
- await Ex1.Run();
- break;
- case "ex2":
- await Ex2.Run();
- break;
- case "ex3":
- await Ex3.Run();
- break;
- case "ex4":
- await Ex4.Run();
- break;
- case "ex5":
- await Ex5.Run();
- break;
- case "ex6":
- await Ex6.Run();
- break;
- default:
- Console.WriteLine($"Unknown example: {args[0]}");
- break;
- }
- }
+
+using System;
+using System.Threading.Tasks;
+
+class Program
+{
+ static async Task Main(string[] args)
+ {
+ if (args.Length == 0)
+ {
+ Console.WriteLine("Usage: dotnet run -- ex1|ex2|ex3|ex4|ex5|ex6");
+ return;
+ }
+
+ switch (args[0].ToLower())
+ {
+ case "ex1":
+ await Ex1.Run();
+ break;
+ case "ex2":
+ await Ex2.Run();
+ break;
+ case "ex3":
+ await Ex3.Run();
+ break;
+ case "ex4":
+ await Ex4.Run();
+ break;
+ case "ex5":
+ await Ex5.Run();
+ break;
+ case "ex6":
+ await Ex6.Run();
+ break;
+ default:
+ Console.WriteLine($"Unknown example: {args[0]}");
+ break;
+ }
+ }
}
\ No newline at end of file
diff --git a/Async_Await/obj/Async_Await.csproj.nuget.dgspec.json b/Async_Await/obj/Async_Await.csproj.nuget.dgspec.json
index c18fa39..765b80f 100644
--- a/Async_Await/obj/Async_Await.csproj.nuget.dgspec.json
+++ b/Async_Await/obj/Async_Await.csproj.nuget.dgspec.json
@@ -1,66 +1,66 @@
-{
- "format": 1,
- "restore": {
- "/workspaces/CSharp/Async_Await/Async_Await.csproj": {}
- },
- "projects": {
- "/workspaces/CSharp/Async_Await/Async_Await.csproj": {
- "version": "1.0.0",
- "restore": {
- "projectUniqueName": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
- "projectName": "Async_Await",
- "projectPath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
- "packagesPath": "/root/.nuget/packages/",
- "outputPath": "/workspaces/CSharp/Async_Await/obj/",
- "projectStyle": "PackageReference",
- "configFilePaths": [
- "/root/.nuget/NuGet/NuGet.Config"
- ],
- "originalTargetFrameworks": [
- "net8.0"
- ],
- "sources": {
- "https://api.nuget.org/v3/index.json": {}
- },
- "frameworks": {
- "net8.0": {
- "targetAlias": "net8.0",
- "projectReferences": {}
- }
- },
- "warningProperties": {
- "warnAsError": [
- "NU1605"
- ]
- },
- "restoreAuditProperties": {
- "enableAudit": "true",
- "auditLevel": "low",
- "auditMode": "direct"
- }
- },
- "frameworks": {
- "net8.0": {
- "targetAlias": "net8.0",
- "imports": [
- "net461",
- "net462",
- "net47",
- "net471",
- "net472",
- "net48",
- "net481"
- ],
- "assetTargetFallback": true,
- "warn": true,
- "frameworkReferences": {
- "Microsoft.NETCore.App": {
- "privateAssets": "all"
- }
- },
- "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.410/PortableRuntimeIdentifierGraph.json"
- }
- }
- }
- }
+{
+ "format": 1,
+ "restore": {
+ "/workspaces/CSharp/Async_Await/Async_Await.csproj": {}
+ },
+ "projects": {
+ "/workspaces/CSharp/Async_Await/Async_Await.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
+ "projectName": "Async_Await",
+ "projectPath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
+ "packagesPath": "/root/.nuget/packages/",
+ "outputPath": "/workspaces/CSharp/Async_Await/obj/",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "/root/.nuget/NuGet/NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.410/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Async_Await/obj/Async_Await.csproj.nuget.g.props b/Async_Await/obj/Async_Await.csproj.nuget.g.props
index 112d2bb..dcad9ea 100644
--- a/Async_Await/obj/Async_Await.csproj.nuget.g.props
+++ b/Async_Await/obj/Async_Await.csproj.nuget.g.props
@@ -1,15 +1,15 @@
-
-
-
- True
- NuGet
- $(MSBuildThisFileDirectory)project.assets.json
- /root/.nuget/packages/
- /root/.nuget/packages/
- PackageReference
- 6.11.1
-
-
-
-
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ /root/.nuget/packages/
+ /root/.nuget/packages/
+ PackageReference
+ 6.11.1
+
+
+
+
\ No newline at end of file
diff --git a/Async_Await/obj/Async_Await.csproj.nuget.g.targets b/Async_Await/obj/Async_Await.csproj.nuget.g.targets
index 3dc06ef..35a7576 100644
--- a/Async_Await/obj/Async_Await.csproj.nuget.g.targets
+++ b/Async_Await/obj/Async_Await.csproj.nuget.g.targets
@@ -1,2 +1,2 @@
-
+
\ No newline at end of file
diff --git a/Async_Await/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/Async_Await/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
index 2217181..678fc5f 100644
--- a/Async_Await/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
+++ b/Async_Await/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
@@ -1,4 +1,4 @@
-//
-using System;
-using System.Reflection;
-[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs b/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs
index 81193bc..2000133 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Async_Await")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9d9bacd718b457b1e622e2000d7baf963457a871")]
[assembly: System.Reflection.AssemblyProductAttribute("Async_Await")]
[assembly: System.Reflection.AssemblyTitleAttribute("Async_Await")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache b/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache
index ec2c667..2c0a7fd 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache
@@ -1 +1 @@
-63804ea50179688365807671500045cda9689bbb802dfd4b9f520cad32043daf
+715df55e00865760b049b6999c3a198f53ad831234a2f70656b0a5d26a34b8f5
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig b/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig
index ded28be..a8c1f76 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig
@@ -8,6 +8,6 @@ build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Async_Await
-build_property.ProjectDir = /workspaces/CSharp/Async_Await/
+build_property.ProjectDir = /workspaces/CSharpProjekt/Async_Await/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.assets.cache b/Async_Await/obj/Debug/net8.0/Async_Await.assets.cache
index cf4ca8d..f1c0f64 100644
Binary files a/Async_Await/obj/Debug/net8.0/Async_Await.assets.cache and b/Async_Await/obj/Debug/net8.0/Async_Await.assets.cache differ
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache b/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache
index 69e2614..2784c70 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-f56eca8a218035aaee0739bd26bba4d23e0f75fd08331f478a25b9179244fa4b
+f56eca8a218035aaee0739bd26bba4d23e0f75fd08331f478a25b9179244fa4b
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.csproj.FileListAbsolute.txt b/Async_Await/obj/Debug/net8.0/Async_Await.csproj.FileListAbsolute.txt
index 9e03ce1..23223c6 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.csproj.FileListAbsolute.txt
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.csproj.FileListAbsolute.txt
@@ -1,14 +1,14 @@
-/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await
-/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.deps.json
-/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.runtimeconfig.json
-/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.dll
-/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.pdb
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.dll
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/refint/Async_Await.dll
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.pdb
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache
-/workspaces/CSharp/Async_Await/obj/Debug/net8.0/ref/Async_Await.dll
+/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await
+/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.deps.json
+/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.runtimeconfig.json
+/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.dll
+/workspaces/CSharp/Async_Await/bin/Debug/net8.0/Async_Await.pdb
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.GeneratedMSBuildEditorConfig.editorconfig
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfoInputs.cache
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.AssemblyInfo.cs
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.csproj.CoreCompileInputs.cache
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.dll
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/refint/Async_Await.dll
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.pdb
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache
+/workspaces/CSharp/Async_Await/obj/Debug/net8.0/ref/Async_Await.dll
diff --git a/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache b/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache
index c6a1464..c9e9627 100644
--- a/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache
+++ b/Async_Await/obj/Debug/net8.0/Async_Await.genruntimeconfig.cache
@@ -1 +1 @@
-735e7f2d774271d1780a96fe641c2f5ec6cf42f9b6bbfa8ed546e26d04a0fe35
+735e7f2d774271d1780a96fe641c2f5ec6cf42f9b6bbfa8ed546e26d04a0fe35
diff --git a/Async_Await/obj/project.assets.json b/Async_Await/obj/project.assets.json
index 4513c64..6654458 100644
--- a/Async_Await/obj/project.assets.json
+++ b/Async_Await/obj/project.assets.json
@@ -1,71 +1,71 @@
-{
- "version": 3,
- "targets": {
- "net8.0": {}
- },
- "libraries": {},
- "projectFileDependencyGroups": {
- "net8.0": []
- },
- "packageFolders": {
- "/root/.nuget/packages/": {}
- },
- "project": {
- "version": "1.0.0",
- "restore": {
- "projectUniqueName": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
- "projectName": "Async_Await",
- "projectPath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
- "packagesPath": "/root/.nuget/packages/",
- "outputPath": "/workspaces/CSharp/Async_Await/obj/",
- "projectStyle": "PackageReference",
- "configFilePaths": [
- "/root/.nuget/NuGet/NuGet.Config"
- ],
- "originalTargetFrameworks": [
- "net8.0"
- ],
- "sources": {
- "https://api.nuget.org/v3/index.json": {}
- },
- "frameworks": {
- "net8.0": {
- "targetAlias": "net8.0",
- "projectReferences": {}
- }
- },
- "warningProperties": {
- "warnAsError": [
- "NU1605"
- ]
- },
- "restoreAuditProperties": {
- "enableAudit": "true",
- "auditLevel": "low",
- "auditMode": "direct"
- }
- },
- "frameworks": {
- "net8.0": {
- "targetAlias": "net8.0",
- "imports": [
- "net461",
- "net462",
- "net47",
- "net471",
- "net472",
- "net48",
- "net481"
- ],
- "assetTargetFallback": true,
- "warn": true,
- "frameworkReferences": {
- "Microsoft.NETCore.App": {
- "privateAssets": "all"
- }
- },
- "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.410/PortableRuntimeIdentifierGraph.json"
- }
- }
- }
+{
+ "version": 3,
+ "targets": {
+ "net8.0": {}
+ },
+ "libraries": {},
+ "projectFileDependencyGroups": {
+ "net8.0": []
+ },
+ "packageFolders": {
+ "/root/.nuget/packages/": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
+ "projectName": "Async_Await",
+ "projectPath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
+ "packagesPath": "/root/.nuget/packages/",
+ "outputPath": "/workspaces/CSharp/Async_Await/obj/",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "/root/.nuget/NuGet/NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "direct"
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/8.0.410/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Async_Await/obj/project.nuget.cache b/Async_Await/obj/project.nuget.cache
index fe2cf43..52eb32c 100644
--- a/Async_Await/obj/project.nuget.cache
+++ b/Async_Await/obj/project.nuget.cache
@@ -1,8 +1,8 @@
-{
- "version": 2,
- "dgSpecHash": "WpEPBuOGmH8=",
- "success": true,
- "projectFilePath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
- "expectedPackageFiles": [],
- "logs": []
+{
+ "version": 2,
+ "dgSpecHash": "WpEPBuOGmH8=",
+ "success": true,
+ "projectFilePath": "/workspaces/CSharp/Async_Await/Async_Await.csproj",
+ "expectedPackageFiles": [],
+ "logs": []
}
\ No newline at end of file
diff --git a/CSharpProjekt.sln b/CSharpProjekt.sln
new file mode 100644
index 0000000..824f8b6
--- /dev/null
+++ b/CSharpProjekt.sln
@@ -0,0 +1,24 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.2.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Async_Await", "Async_Await\Async_Await.csproj", "{43D83C40-3641-95EC-E9D8-56C37192E099}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {43D83C40-3641-95EC-E9D8-56C37192E099}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {43D83C40-3641-95EC-E9D8-56C37192E099}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {43D83C40-3641-95EC-E9D8-56C37192E099}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {43D83C40-3641-95EC-E9D8-56C37192E099}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {01C1DFBB-F25B-4F05-9057-239C7852F3E2}
+ EndGlobalSection
+EndGlobal
diff --git a/Einrichten und Ausführen.md b/Einrichten und Ausführen.md
index 700d7f6..249f11b 100644
--- a/Einrichten und Ausführen.md
+++ b/Einrichten und Ausführen.md
@@ -1,65 +1,65 @@
-
-# 🛠️ C# Projekt in Visual Studio Code einrichten und ausführen
-
-## ✅ Voraussetzungen
-
-- [.NET SDK](https://dotnet.microsoft.com/en-us/download) installiert
- Prüfen mit:
- ```bash
- dotnet --version
- ```
-- **Visual Studio Code** installiert
-- In VS Code folgende Extensions installieren:
- - **C# Dev Kit**
-
----
-
-## 📁 Neues C# Konsolenprojekt erstellen
-
-```bash
-dotnet new console -n HelloWorld
-cd HelloWorld
-code .
-```
-
-| Befehl | Bedeutung |
-|--------|-----------|
-| `dotnet new console` | Erstellt ein Konsolenprojekt |
-| `-n HelloWorld` | Legt den Projektnamen fest |
-| `code .` | Öffnet das Projekt in VS Code |
-
----
-
-## 📦 Projektstruktur
-
-Nach dem Öffnen in VS Code solltest du sehen:
-
-```
-HelloWorld/
-├── Program.cs // Hauptprogramm
-├── HelloWorld.csproj // Projektdefinition
-```
-
----
-
-## ▶️ Projekt ausführen
-
-### Über Terminal:
-
-```bash
-dotnet run
-```
-
----
-
-## 📌 Nützliche Befehle
-
-| Befehl | Beschreibung |
-| --------------------- | ----------------------------------------- |
-| `dotnet build` | Projekt kompilieren |
-| `dotnet run` | Projekt bauen und ausführen |
-| `dotnet clean` | Build-Ordner bereinigen |
-| `dotnet new` | Neue Projektvorlagen anzeigen |
-| `dotnet list package` | Installierte Pakete anzeigen |
-| ``dotnet test`` | Führt automatisierte Tests im Projekt aus |
-
+
+# 🛠️ C# Projekt in Visual Studio Code einrichten und ausführen
+
+## ✅ Voraussetzungen
+
+- [.NET SDK](https://dotnet.microsoft.com/en-us/download) installiert
+ Prüfen mit:
+ ```bash
+ dotnet --version
+ ```
+- **Visual Studio Code** installiert
+- In VS Code folgende Extensions installieren:
+ - **C# Dev Kit**
+
+---
+
+## 📁 Neues C# Konsolenprojekt erstellen
+
+```bash
+dotnet new console -n HelloWorld
+cd HelloWorld
+code .
+```
+
+| Befehl | Bedeutung |
+|--------|-----------|
+| `dotnet new console` | Erstellt ein Konsolenprojekt |
+| `-n HelloWorld` | Legt den Projektnamen fest |
+| `code .` | Öffnet das Projekt in VS Code |
+
+---
+
+## 📦 Projektstruktur
+
+Nach dem Öffnen in VS Code solltest du sehen:
+
+```
+HelloWorld/
+├── Program.cs // Hauptprogramm
+├── HelloWorld.csproj // Projektdefinition
+```
+
+---
+
+## ▶️ Projekt ausführen
+
+### Über Terminal:
+
+```bash
+dotnet run
+```
+
+---
+
+## 📌 Nützliche Befehle
+
+| Befehl | Beschreibung |
+| --------------------- | ----------------------------------------- |
+| `dotnet build` | Projekt kompilieren |
+| `dotnet run` | Projekt bauen und ausführen |
+| `dotnet clean` | Build-Ordner bereinigen |
+| `dotnet new` | Neue Projektvorlagen anzeigen |
+| `dotnet list package` | Installierte Pakete anzeigen |
+| ``dotnet test`` | Führt automatisierte Tests im Projekt aus |
+
diff --git a/mqtt_task_pr3.cs b/mqtt_task_pr3.cs
index 6eb0ce4..c460a00 100644
--- a/mqtt_task_pr3.cs
+++ b/mqtt_task_pr3.cs
@@ -1,151 +1,151 @@
-using MQTTnet;
-using MQTTnet.Client;
-using System.Text.Json;
-
-namespace MqttSensorApp
-{
- // TODO: Aufgabe 3: Implementieren Sie die SensorData-Klasse
- public class SensorData
- {
- // TODO: Ergänzen Sie Properties für Temperature, Humidity und Location
- // Nutzen Sie JsonPropertyName-Attribute für die JSON-Deserialisierung
-
- }
-
- public class Program
- {
- private static List receivedTemperatures = new List();
-
- public static async Task Main(string[] args)
- {
- Console.WriteLine("MQTT Sensor Data Processor gestartet...");
-
- // MQTT Client Setup (bereits implementiert)
- var factory = new MqttFactory();
- var client = factory.CreateMqttClient();
-
- // Event Handler für empfangene Nachrichten
- client.ApplicationMessageReceivedAsync += async e =>
- {
- var payload = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
- await ProcessMessage(payload);
- };
-
- // Verbindungsoptionen
- var options = new MqttClientOptionsBuilder()
- .WithTcpServer("broker.hivemq.com", 1883)
- .WithClientId($"SensorClient_{Guid.NewGuid()}")
- .WithCleanSession()
- .Build();
-
- try
- {
- // Verbindung aufbauen
- await client.ConnectAsync(options);
- Console.WriteLine("Mit MQTT Broker verbunden");
-
- // Topic abonnieren
- await client.SubscribeAsync("sensor/data/room1");
- Console.WriteLine("Topic 'sensor/data/room1' abonniert");
-
- // Simulierte Sensordaten senden (für Testing)
- await SendTestData(client);
-
- // Programm laufen lassen
- Console.WriteLine("Drücken Sie eine Taste zum Beenden...");
- Console.ReadKey();
-
- // Verbindung trennen
- await client.DisconnectAsync();
- }
- catch (Exception ex)
- {
- Console.WriteLine($"Fehler: {ex.Message}");
- }
- }
-
- private static async Task ProcessMessage(string jsonPayload)
- {
- try
- {
- Console.WriteLine($"Empfangen: {jsonPayload}");
-
- // TODO: Aufgabe 3: Deserialisieren Sie den JSON zu SensorData
- // var sensorData = JsonSerializer.Deserialize(jsonPayload);
-
- // Temporäre Lösung für Aufgabe 1 und 2
- var data = JsonSerializer.Deserialize>(jsonPayload);
-
- if (data != null && data.ContainsKey("temperature"))
- {
- var temp = Convert.ToDouble(data["temperature"].ToString());
- receivedTemperatures.Add(temp);
-
- // Nachricht analysieren
- var analysis = AnalyzeMessage(temp);
- Console.WriteLine($"Analyse: {analysis}");
- }
-
- // Alle 5 Nachrichten: Hohe Temperaturen anzeigen
- if (receivedTemperatures.Count % 5 == 0)
- {
- var highTemps = FilterHighTemperatures(receivedTemperatures);
- Console.WriteLine($"Hohe Temperaturen (>25°C): {string.Join(", ", highTemps.Select(t => $"{t:F1}°C"))}");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"Fehler beim Verarbeiten der Nachricht: {ex.Message}");
- }
- }
-
- // TODO: Aufgabe 1: LINQ-Abfrage implementieren
- private static IEnumerable FilterHighTemperatures(List temperatures)
- {
- // TODO: Verwenden Sie LINQ (Where-Klausel), um alle Temperaturen > 25°C zu filtern
- // Beispiel: return temperatures.Where(...);
-
- return new List(); // Platzhalter, ersetzen Sie diese Zeile
- }
-
- // TODO: Aufgabe 2: Pattern Matching implementieren
- private static string AnalyzeMessage(object value)
- {
- // TODO: Implementieren Sie Pattern Matching mit switch expression
- // Behandeln Sie folgende Fälle:
- // - double über 30: "WARNUNG: Sehr hohe Temperatur!"
- // - double zwischen 25-30: "Hohe Temperatur"
- // - double unter 25: "Normale Temperatur"
- // - string: "Text-Nachricht erhalten"
- // - null: "Keine Daten"
- // - default: "Unbekannter Datentyp"
-
- return "TODO: Pattern Matching implementieren"; // Platzhalter
- }
-
- // Hilfsmethode: Testnachrichten senden
- private static async Task SendTestData(IMqttClient client)
- {
- var testData = new[]
- {
- new { temperature = 22.5, humidity = 65.0, location = "Room1" },
- new { temperature = 28.3, humidity = 58.2, location = "Room1" },
- new { temperature = 19.8, humidity = 72.1, location = "Room1" },
- new { temperature = 31.2, humidity = 45.3, location = "Room1" },
- new { temperature = 26.7, humidity = 62.8, location = "Room1" }
- };
-
- foreach (var data in testData)
- {
- var json = JsonSerializer.Serialize(data);
- var message = new MqttApplicationMessageBuilder()
- .WithTopic("sensor/data/room1")
- .WithPayload(json)
- .Build();
-
- await client.PublishAsync(message);
- await Task.Delay(2000); // 2 Sekunden Pause
- }
- }
- }
+using MQTTnet;
+using MQTTnet.Client;
+using System.Text.Json;
+
+namespace MqttSensorApp
+{
+ // TODO: Aufgabe 3: Implementieren Sie die SensorData-Klasse
+ public class SensorData
+ {
+ // TODO: Ergänzen Sie Properties für Temperature, Humidity und Location
+ // Nutzen Sie JsonPropertyName-Attribute für die JSON-Deserialisierung
+
+ }
+
+ public class Program
+ {
+ private static List receivedTemperatures = new List();
+
+ public static async Task Main(string[] args)
+ {
+ Console.WriteLine("MQTT Sensor Data Processor gestartet...");
+
+ // MQTT Client Setup (bereits implementiert)
+ var factory = new MqttFactory();
+ var client = factory.CreateMqttClient();
+
+ // Event Handler für empfangene Nachrichten
+ client.ApplicationMessageReceivedAsync += async e =>
+ {
+ var payload = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+ await ProcessMessage(payload);
+ };
+
+ // Verbindungsoptionen
+ var options = new MqttClientOptionsBuilder()
+ .WithTcpServer("broker.hivemq.com", 1883)
+ .WithClientId($"SensorClient_{Guid.NewGuid()}")
+ .WithCleanSession()
+ .Build();
+
+ try
+ {
+ // Verbindung aufbauen
+ await client.ConnectAsync(options);
+ Console.WriteLine("Mit MQTT Broker verbunden");
+
+ // Topic abonnieren
+ await client.SubscribeAsync("sensor/data/room1");
+ Console.WriteLine("Topic 'sensor/data/room1' abonniert");
+
+ // Simulierte Sensordaten senden (für Testing)
+ await SendTestData(client);
+
+ // Programm laufen lassen
+ Console.WriteLine("Drücken Sie eine Taste zum Beenden...");
+ Console.ReadKey();
+
+ // Verbindung trennen
+ await client.DisconnectAsync();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Fehler: {ex.Message}");
+ }
+ }
+
+ private static async Task ProcessMessage(string jsonPayload)
+ {
+ try
+ {
+ Console.WriteLine($"Empfangen: {jsonPayload}");
+
+ // TODO: Aufgabe 3: Deserialisieren Sie den JSON zu SensorData
+ // var sensorData = JsonSerializer.Deserialize(jsonPayload);
+
+ // Temporäre Lösung für Aufgabe 1 und 2
+ var data = JsonSerializer.Deserialize>(jsonPayload);
+
+ if (data != null && data.ContainsKey("temperature"))
+ {
+ var temp = Convert.ToDouble(data["temperature"].ToString());
+ receivedTemperatures.Add(temp);
+
+ // Nachricht analysieren
+ var analysis = AnalyzeMessage(temp);
+ Console.WriteLine($"Analyse: {analysis}");
+ }
+
+ // Alle 5 Nachrichten: Hohe Temperaturen anzeigen
+ if (receivedTemperatures.Count % 5 == 0)
+ {
+ var highTemps = FilterHighTemperatures(receivedTemperatures);
+ Console.WriteLine($"Hohe Temperaturen (>25°C): {string.Join(", ", highTemps.Select(t => $"{t:F1}°C"))}");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Fehler beim Verarbeiten der Nachricht: {ex.Message}");
+ }
+ }
+
+ // TODO: Aufgabe 1: LINQ-Abfrage implementieren
+ private static IEnumerable FilterHighTemperatures(List temperatures)
+ {
+ // TODO: Verwenden Sie LINQ (Where-Klausel), um alle Temperaturen > 25°C zu filtern
+ // Beispiel: return temperatures.Where(...);
+
+ return new List(); // Platzhalter, ersetzen Sie diese Zeile
+ }
+
+ // TODO: Aufgabe 2: Pattern Matching implementieren
+ private static string AnalyzeMessage(object value)
+ {
+ // TODO: Implementieren Sie Pattern Matching mit switch expression
+ // Behandeln Sie folgende Fälle:
+ // - double über 30: "WARNUNG: Sehr hohe Temperatur!"
+ // - double zwischen 25-30: "Hohe Temperatur"
+ // - double unter 25: "Normale Temperatur"
+ // - string: "Text-Nachricht erhalten"
+ // - null: "Keine Daten"
+ // - default: "Unbekannter Datentyp"
+
+ return "TODO: Pattern Matching implementieren"; // Platzhalter
+ }
+
+ // Hilfsmethode: Testnachrichten senden
+ private static async Task SendTestData(IMqttClient client)
+ {
+ var testData = new[]
+ {
+ new { temperature = 22.5, humidity = 65.0, location = "Room1" },
+ new { temperature = 28.3, humidity = 58.2, location = "Room1" },
+ new { temperature = 19.8, humidity = 72.1, location = "Room1" },
+ new { temperature = 31.2, humidity = 45.3, location = "Room1" },
+ new { temperature = 26.7, humidity = 62.8, location = "Room1" }
+ };
+
+ foreach (var data in testData)
+ {
+ var json = JsonSerializer.Serialize(data);
+ var message = new MqttApplicationMessageBuilder()
+ .WithTopic("sensor/data/room1")
+ .WithPayload(json)
+ .Build();
+
+ await client.PublishAsync(message);
+ await Task.Delay(2000); // 2 Sekunden Pause
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/mqtt_task_pr3_solution.cs b/mqtt_task_pr3_solution.cs
index 4545933..b1e9e09 100644
--- a/mqtt_task_pr3_solution.cs
+++ b/mqtt_task_pr3_solution.cs
@@ -1,151 +1,151 @@
-using MQTTnet;
-using MQTTnet.Client;
-using System.Text.Json;
-using System.Text.Json.Serialization;
-
-namespace MqttSensorApp
-{
- // LÖSUNG Aufgabe 3: SensorData-Klasse implementieren
- public class SensorData
- {
- [JsonPropertyName("temperature")]
- public double Temperature { get; set; }
-
- [JsonPropertyName("humidity")]
- public double Humidity { get; set; }
-
- [JsonPropertyName("location")]
- public string Location { get; set; } = string.Empty;
- }
-
- public class Program
- {
- private static List receivedTemperatures = new List();
-
- public static async Task Main(string[] args)
- {
- Console.WriteLine("MQTT Sensor Data Processor gestartet...");
-
- // MQTT Client Setup (bereits implementiert)
- var factory = new MqttFactory();
- var client = factory.CreateMqttClient();
-
- // Event Handler für empfangene Nachrichten
- client.ApplicationMessageReceivedAsync += async e =>
- {
- var payload = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
- await ProcessMessage(payload);
- };
-
- // Verbindungsoptionen
- var options = new MqttClientOptionsBuilder()
- .WithTcpServer("broker.hivemq.com", 1883)
- .WithClientId($"SensorClient_{Guid.NewGuid()}")
- .WithCleanSession()
- .Build();
-
- try
- {
- // Verbindung aufbauen
- await client.ConnectAsync(options);
- Console.WriteLine("Mit MQTT Broker verbunden");
-
- // Topic abonnieren
- await client.SubscribeAsync("sensor/data/room1");
- Console.WriteLine("Topic 'sensor/data/room1' abonniert");
-
- // Simulierte Sensordaten senden (für Testing)
- await SendTestData(client);
-
- // Programm laufen lassen
- Console.WriteLine("Drücken Sie eine Taste zum Beenden...");
- Console.ReadKey();
-
- // Verbindung trennen
- await client.DisconnectAsync();
- }
- catch (Exception ex)
- {
- Console.WriteLine($"Fehler: {ex.Message}");
- }
- }
-
- private static async Task ProcessMessage(string jsonPayload)
- {
- try
- {
- Console.WriteLine($"Empfangen: {jsonPayload}");
-
- // LÖSUNG Aufgabe 3: Deserialisieren des JSON zu SensorData
- var sensorData = JsonSerializer.Deserialize(jsonPayload);
-
- if (sensorData != null)
- {
- receivedTemperatures.Add(sensorData.Temperature);
-
- // LÖSUNG Aufgabe 2: Pattern Matching anwenden
- var analysis = AnalyzeMessage(sensorData.Temperature);
- Console.WriteLine($"Analyse: {analysis}");
- }
-
- // Alle 5 Nachrichten: Hohe Temperaturen anzeigen
- if (receivedTemperatures.Count % 5 == 0)
- {
- var highTemps = FilterHighTemperatures(receivedTemperatures);
- Console.WriteLine($"Hohe Temperaturen (>25°C): {string.Join(", ", highTemps.Select(t => $"{t:F1}°C"))}");
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"Fehler beim Verarbeiten der Nachricht: {ex.Message}");
- }
- }
-
- // LÖSUNG Aufgabe 1: LINQ-Abfrage implementieren
- private static IEnumerable FilterHighTemperatures(List temperatures)
- {
- // LINQ Where-Klausel verwenden, um Temperaturen > 25°C zu filtern
- return temperatures.Where(temp => temp > 25.0);
- }
-
- // LÖSUNG Aufgabe 2: Pattern Matching implementieren
- private static string AnalyzeMessage(object value)
- {
- // Switch expression mit Pattern Matching
- return value switch
- {
- double temp when temp > 30.0 => "WARNUNG: Sehr hohe Temperatur!",
- double temp when temp >= 25.0 && temp <= 30.0 => "Hohe Temperatur",
- double temp when temp < 25.0 => "Normale Temperatur",
- string text => "Text-Nachricht erhalten",
- null => "Keine Daten",
- _ => "Unbekannter Datentyp"
- };
- }
-
- // Hilfsmethode: Testnachrichten senden
- private static async Task SendTestData(IMqttClient client)
- {
- var testData = new[]
- {
- new { temperature = 22.5, humidity = 65.0, location = "Room1" },
- new { temperature = 28.3, humidity = 58.2, location = "Room1" },
- new { temperature = 19.8, humidity = 72.1, location = "Room1" },
- new { temperature = 31.2, humidity = 45.3, location = "Room1" },
- new { temperature = 26.7, humidity = 62.8, location = "Room1" }
- };
-
- foreach (var data in testData)
- {
- var json = JsonSerializer.Serialize(data);
- var message = new MqttApplicationMessageBuilder()
- .WithTopic("sensor/data/room1")
- .WithPayload(json)
- .Build();
-
- await client.PublishAsync(message);
- await Task.Delay(2000); // 2 Sekunden Pause
- }
- }
- }
+using MQTTnet;
+using MQTTnet.Client;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace MqttSensorApp
+{
+ // LÖSUNG Aufgabe 3: SensorData-Klasse implementieren
+ public class SensorData
+ {
+ [JsonPropertyName("temperature")]
+ public double Temperature { get; set; }
+
+ [JsonPropertyName("humidity")]
+ public double Humidity { get; set; }
+
+ [JsonPropertyName("location")]
+ public string Location { get; set; } = string.Empty;
+ }
+
+ public class Program
+ {
+ private static List receivedTemperatures = new List();
+
+ public static async Task Main(string[] args)
+ {
+ Console.WriteLine("MQTT Sensor Data Processor gestartet...");
+
+ // MQTT Client Setup (bereits implementiert)
+ var factory = new MqttFactory();
+ var client = factory.CreateMqttClient();
+
+ // Event Handler für empfangene Nachrichten
+ client.ApplicationMessageReceivedAsync += async e =>
+ {
+ var payload = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+ await ProcessMessage(payload);
+ };
+
+ // Verbindungsoptionen
+ var options = new MqttClientOptionsBuilder()
+ .WithTcpServer("broker.hivemq.com", 1883)
+ .WithClientId($"SensorClient_{Guid.NewGuid()}")
+ .WithCleanSession()
+ .Build();
+
+ try
+ {
+ // Verbindung aufbauen
+ await client.ConnectAsync(options);
+ Console.WriteLine("Mit MQTT Broker verbunden");
+
+ // Topic abonnieren
+ await client.SubscribeAsync("sensor/data/room1");
+ Console.WriteLine("Topic 'sensor/data/room1' abonniert");
+
+ // Simulierte Sensordaten senden (für Testing)
+ await SendTestData(client);
+
+ // Programm laufen lassen
+ Console.WriteLine("Drücken Sie eine Taste zum Beenden...");
+ Console.ReadKey();
+
+ // Verbindung trennen
+ await client.DisconnectAsync();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Fehler: {ex.Message}");
+ }
+ }
+
+ private static async Task ProcessMessage(string jsonPayload)
+ {
+ try
+ {
+ Console.WriteLine($"Empfangen: {jsonPayload}");
+
+ // LÖSUNG Aufgabe 3: Deserialisieren des JSON zu SensorData
+ var sensorData = JsonSerializer.Deserialize(jsonPayload);
+
+ if (sensorData != null)
+ {
+ receivedTemperatures.Add(sensorData.Temperature);
+
+ // LÖSUNG Aufgabe 2: Pattern Matching anwenden
+ var analysis = AnalyzeMessage(sensorData.Temperature);
+ Console.WriteLine($"Analyse: {analysis}");
+ }
+
+ // Alle 5 Nachrichten: Hohe Temperaturen anzeigen
+ if (receivedTemperatures.Count % 5 == 0)
+ {
+ var highTemps = FilterHighTemperatures(receivedTemperatures);
+ Console.WriteLine($"Hohe Temperaturen (>25°C): {string.Join(", ", highTemps.Select(t => $"{t:F1}°C"))}");
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"Fehler beim Verarbeiten der Nachricht: {ex.Message}");
+ }
+ }
+
+ // LÖSUNG Aufgabe 1: LINQ-Abfrage implementieren
+ private static IEnumerable FilterHighTemperatures(List temperatures)
+ {
+ // LINQ Where-Klausel verwenden, um Temperaturen > 25°C zu filtern
+ return temperatures.Where(temp => temp > 25.0);
+ }
+
+ // LÖSUNG Aufgabe 2: Pattern Matching implementieren
+ private static string AnalyzeMessage(object value)
+ {
+ // Switch expression mit Pattern Matching
+ return value switch
+ {
+ double temp when temp > 30.0 => "WARNUNG: Sehr hohe Temperatur!",
+ double temp when temp >= 25.0 && temp <= 30.0 => "Hohe Temperatur",
+ double temp when temp < 25.0 => "Normale Temperatur",
+ string text => "Text-Nachricht erhalten",
+ null => "Keine Daten",
+ _ => "Unbekannter Datentyp"
+ };
+ }
+
+ // Hilfsmethode: Testnachrichten senden
+ private static async Task SendTestData(IMqttClient client)
+ {
+ var testData = new[]
+ {
+ new { temperature = 22.5, humidity = 65.0, location = "Room1" },
+ new { temperature = 28.3, humidity = 58.2, location = "Room1" },
+ new { temperature = 19.8, humidity = 72.1, location = "Room1" },
+ new { temperature = 31.2, humidity = 45.3, location = "Room1" },
+ new { temperature = 26.7, humidity = 62.8, location = "Room1" }
+ };
+
+ foreach (var data in testData)
+ {
+ var json = JsonSerializer.Serialize(data);
+ var message = new MqttApplicationMessageBuilder()
+ .WithTopic("sensor/data/room1")
+ .WithPayload(json)
+ .Build();
+
+ await client.PublishAsync(message);
+ await Task.Delay(2000); // 2 Sekunden Pause
+ }
+ }
+ }
}
\ No newline at end of file