From 2549653f2c890befd2406d3e44cb51975fd09fb2 Mon Sep 17 00:00:00 2001
From: Geir Okkenhaug Jerstad <geokkjer@gmail.com>
Date: Tue, 10 Dec 2024 14:42:11 +0100
Subject: [PATCH] Jobbet litt med trafikklys

---
 Emne 3/APITerje/APITerje.sln                  | 16 +++++++
 Emne 3/APITerje/APITerje/APITerje.csproj      | 14 ++++++
 Emne 3/APITerje/APITerje/APITerje.http        |  6 +++
 Emne 3/APITerje/APITerje/Program.cs           | 44 +++++++++++++++++++
 .../APITerje/Properties/launchSettings.json   | 41 +++++++++++++++++
 .../APITerje/appsettings.Development.json     |  8 ++++
 Emne 3/APITerje/APITerje/appsettings.json     |  9 ++++
 Emne 3/Trafikklys/Trafikklys/Demo2/Demo2.cs   | 17 +++++++
 .../Trafikklys/Trafikklys/Demo2/Trafikklys.cs | 40 +++++++++++++++++
 Emne 3/Trafikklys/Trafikklys/Demo3/Demo3.cs   | 16 +++++++
 .../Trafikklys/Trafikklys/Demo3/Trafikklys.cs | 38 ++++++++++++++++
 Emne 3/Trafikklys/Trafikklys/Demo4/Demo4.cs   | 16 +++++++
 .../Trafikklys/Trafikklys/Demo4/Trafikklys.cs | 27 ++++++++++++
 Emne 3/Trafikklys/Trafikklys/Program.cs       |  5 ++-
 14 files changed, 296 insertions(+), 1 deletion(-)
 create mode 100644 Emne 3/APITerje/APITerje.sln
 create mode 100644 Emne 3/APITerje/APITerje/APITerje.csproj
 create mode 100644 Emne 3/APITerje/APITerje/APITerje.http
 create mode 100644 Emne 3/APITerje/APITerje/Program.cs
 create mode 100644 Emne 3/APITerje/APITerje/Properties/launchSettings.json
 create mode 100644 Emne 3/APITerje/APITerje/appsettings.Development.json
 create mode 100644 Emne 3/APITerje/APITerje/appsettings.json
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo2/Demo2.cs
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo2/Trafikklys.cs
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo3/Demo3.cs
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo3/Trafikklys.cs
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo4/Demo4.cs
 create mode 100644 Emne 3/Trafikklys/Trafikklys/Demo4/Trafikklys.cs

diff --git a/Emne 3/APITerje/APITerje.sln b/Emne 3/APITerje/APITerje.sln
new file mode 100644
index 0000000..cc8d065
--- /dev/null
+++ b/Emne 3/APITerje/APITerje.sln	
@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "APITerje", "APITerje\APITerje.csproj", "{E4E2138D-5CBC-489A-B0AA-2116EB2BF7CD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E4E2138D-5CBC-489A-B0AA-2116EB2BF7CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E4E2138D-5CBC-489A-B0AA-2116EB2BF7CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E4E2138D-5CBC-489A-B0AA-2116EB2BF7CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E4E2138D-5CBC-489A-B0AA-2116EB2BF7CD}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal
diff --git a/Emne 3/APITerje/APITerje/APITerje.csproj b/Emne 3/APITerje/APITerje/APITerje.csproj
new file mode 100644
index 0000000..3d173c2
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/APITerje.csproj	
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+    <PropertyGroup>
+        <TargetFramework>net8.0</TargetFramework>
+        <Nullable>enable</Nullable>
+        <ImplicitUsings>enable</ImplicitUsings>
+    </PropertyGroup>
+
+    <ItemGroup>
+        <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.8"/>
+        <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>
+    </ItemGroup>
+
+</Project>
diff --git a/Emne 3/APITerje/APITerje/APITerje.http b/Emne 3/APITerje/APITerje/APITerje.http
new file mode 100644
index 0000000..19bfc1e
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/APITerje.http	
@@ -0,0 +1,6 @@
+@APITerje_HostAddress = http://localhost:5253
+
+GET {{APITerje_HostAddress}}/weatherforecast/
+Accept: application/json
+
+###
diff --git a/Emne 3/APITerje/APITerje/Program.cs b/Emne 3/APITerje/APITerje/Program.cs
new file mode 100644
index 0000000..161f695
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/Program.cs	
@@ -0,0 +1,44 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+builder.Services.AddEndpointsApiExplorer();
+builder.Services.AddSwaggerGen();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+    app.UseSwagger();
+    app.UseSwaggerUI();
+}
+
+app.UseHttpsRedirection();
+
+var summaries = new[]
+{
+    "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
+};
+
+app.MapGet("/weatherforecast", () =>
+    {
+        var forecast = Enumerable.Range(1, 5).Select(index =>
+                new WeatherForecast
+                (
+                    DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
+                    Random.Shared.Next(-20, 55),
+                    summaries[Random.Shared.Next(summaries.Length)]
+                ))
+            .ToArray();
+        return forecast;
+    })
+    .WithName("GetWeatherForecast")
+    .WithOpenApi();
+
+app.Run();
+
+record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
+{
+    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+}
\ No newline at end of file
diff --git a/Emne 3/APITerje/APITerje/Properties/launchSettings.json b/Emne 3/APITerje/APITerje/Properties/launchSettings.json
new file mode 100644
index 0000000..8e6b0bc
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/Properties/launchSettings.json	
@@ -0,0 +1,41 @@
+{
+  "$schema": "http://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:14325",
+      "sslPort": 44307
+    }
+  },
+  "profiles": {
+    "http": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "launchUrl": "swagger",
+      "applicationUrl": "http://localhost:5253",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "https": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "launchUrl": "swagger",
+      "applicationUrl": "https://localhost:7131;http://localhost:5253",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "launchUrl": "swagger",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}
diff --git a/Emne 3/APITerje/APITerje/appsettings.Development.json b/Emne 3/APITerje/APITerje/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/appsettings.Development.json	
@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git a/Emne 3/APITerje/APITerje/appsettings.json b/Emne 3/APITerje/APITerje/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/Emne 3/APITerje/APITerje/appsettings.json	
@@ -0,0 +1,9 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  },
+  "AllowedHosts": "*"
+}
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo2/Demo2.cs b/Emne 3/Trafikklys/Trafikklys/Demo2/Demo2.cs
new file mode 100644
index 0000000..2d2511b
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo2/Demo2.cs	
@@ -0,0 +1,17 @@
+namespace Trafikklys.Demo2;
+
+internal class Demo2
+{
+    public static void Run()
+    {
+        var trafikklys = new Trafikklys();
+        while (true)
+        {
+            Console.Clear();
+            trafikklys.Show();
+            Console.ReadKey(true);
+            trafikklys.GoToNextPhase();
+        }
+    }
+}
+
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo2/Trafikklys.cs b/Emne 3/Trafikklys/Trafikklys/Demo2/Trafikklys.cs
new file mode 100644
index 0000000..96dd1fd
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo2/Trafikklys.cs	
@@ -0,0 +1,40 @@
+namespace Trafikklys.Demo2;
+
+internal class Trafikklys
+{ 
+    bool red;
+    bool yellow;
+    bool green; 
+
+    public Trafikklys()
+    {
+        red = true;
+    }
+
+    public void Show()
+    {
+      TrafikklysKonsoll.Show(red, yellow, green);   
+    }
+
+    public void GoToNextPhase()
+    {
+        if (red && !yellow)
+        {
+            yellow = true;
+        }
+        else if (red)
+        {
+            red = false; 
+            yellow = false; 
+            green = true;
+        }else if (green)
+        { 
+            green = false; 
+            yellow = true;
+        }else if (yellow)
+        { 
+            yellow = false; 
+            red = true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo3/Demo3.cs b/Emne 3/Trafikklys/Trafikklys/Demo3/Demo3.cs
new file mode 100644
index 0000000..97acac8
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo3/Demo3.cs	
@@ -0,0 +1,16 @@
+namespace Trafikklys.Demo3;
+
+public class Demo3
+{
+    public static void Run()
+    {
+        var trafikklys = new Trafikklys();
+        while (true)
+        { 
+            Console.Clear(); 
+            trafikklys.Show(); 
+            Console.ReadKey(true); 
+            trafikklys.GoToNextPhase();
+        }
+    }
+}
\ No newline at end of file
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo3/Trafikklys.cs b/Emne 3/Trafikklys/Trafikklys/Demo3/Trafikklys.cs
new file mode 100644
index 0000000..1019f63
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo3/Trafikklys.cs	
@@ -0,0 +1,38 @@
+namespace Trafikklys.Demo3;
+
+public class Trafikklys
+{
+    private bool Red { get; set; }
+    public bool Yellow { get; private set; }
+    public bool Green { get; private set; }
+
+    public Trafikklys()
+    { 
+        Red = true;
+    }
+    public void Show() 
+    {
+        TrafikklysKonsoll.Show(Red, Yellow, Green);   
+    }
+    
+    public void GoToNextPhase()
+    {
+        if (Red && !Yellow)
+        {
+            Yellow = true;
+        }else if (Red)
+        { 
+            Red = false;
+            Yellow = false;
+            Green = true;
+        }else if (Green)
+        { 
+            Green = false; 
+            Yellow = true;
+        }else if (Yellow) 
+        { 
+            Yellow = false; 
+            Red = true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo4/Demo4.cs b/Emne 3/Trafikklys/Trafikklys/Demo4/Demo4.cs
new file mode 100644
index 0000000..9f5aff5
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo4/Demo4.cs	
@@ -0,0 +1,16 @@
+namespace Trafikklys.Demo4;
+
+public class Demo4
+{
+ public static void Run()
+     {
+         var trafikklys = new Trafikklys();
+         while (true)
+         { 
+             Console.Clear(); 
+             trafikklys.Show(); 
+             Console.ReadKey(true); 
+             trafikklys.GoToNextPhase();
+         }
+     }   
+}
\ No newline at end of file
diff --git a/Emne 3/Trafikklys/Trafikklys/Demo4/Trafikklys.cs b/Emne 3/Trafikklys/Trafikklys/Demo4/Trafikklys.cs
new file mode 100644
index 0000000..c55182f
--- /dev/null
+++ b/Emne 3/Trafikklys/Trafikklys/Demo4/Trafikklys.cs	
@@ -0,0 +1,27 @@
+namespace Trafikklys.Demo4;
+
+public class Trafikklys
+{ 
+    private int _phase;
+
+    public void SetPhase(int phase)
+    {
+        if (phase >= 0 && phase <= 3)
+        {
+            _phase = phase;
+        }
+    }
+    public void Show()
+   {
+       var red = _phase < 2;
+       var yellow = _phase is 1 or 3;
+       var green = _phase == 2;
+       
+       TrafikklysKonsoll.Show(red, yellow, green);   
+   }
+
+    public void GoToNextPhase()
+    {
+        _phase = _phase < 3 ? _phase + 1 : 0;
+    }
+}
\ No newline at end of file
diff --git a/Emne 3/Trafikklys/Trafikklys/Program.cs b/Emne 3/Trafikklys/Trafikklys/Program.cs
index 567871d..1cc181c 100644
--- a/Emne 3/Trafikklys/Trafikklys/Program.cs	
+++ b/Emne 3/Trafikklys/Trafikklys/Program.cs	
@@ -1,3 +1,6 @@
 using Trafikklys.Demo1;
+using Trafikklys.Demo2;
+using Trafikklys.Demo3;
+using Trafikklys.Demo4;
 
-Demo1.Run();
+Trafikklys.Demo4.Demo4.Run();