diff --git a/ClientApp/Utils/Client.cs b/ClientApp/Utils/Client.cs index 90d17a9..3f0cd33 100644 --- a/ClientApp/Utils/Client.cs +++ b/ClientApp/Utils/Client.cs @@ -300,6 +300,7 @@ namespace ClientApp.Utils this.stream.Dispose(); this.client.Dispose(); this.handler.stop(); + this.engineConnection.Stop(); } } } diff --git a/ClientApp/Utils/EngineConnection.cs b/ClientApp/Utils/EngineConnection.cs index 3706e87..c852058 100644 --- a/ClientApp/Utils/EngineConnection.cs +++ b/ClientApp/Utils/EngineConnection.cs @@ -178,7 +178,7 @@ namespace ClientApp.Utils Console.WriteLine("set tunnel id to " + tunnelId); if (tunnelId == null) { - Write("could not find a valid tunnel id!"); + //Write("could not find a valid tunnel id!"); OnNoTunnelId?.Invoke(); Connected = false; FollowingRoute = false; @@ -256,9 +256,9 @@ namespace ClientApp.Utils WriteTextMessage(mainCommand.ShowRoute("showRouteFalse", false)); }); }); - setEnvironment(); + setEnvironment(); + - } private void setEnvironment() @@ -348,7 +348,7 @@ namespace ClientApp.Utils ImprovedPerlin improvedPerlin = new ImprovedPerlin(0, LibNoise.NoiseQuality.Best); for (int i = 0; i < 256 * 256; i++) { - height[i] = improvedPerlin.GetValue(x /10, x / 10, x * 100) / 3.5f + 1; + height[i] = improvedPerlin.GetValue(x / 10, x / 10, x * 100) / 3.5f + 1; //if (height[i] > 1.1f) //{ diff --git a/Hashing/DataParser.cs b/Hashing/DataParser.cs index b4b3be5..9a6bc3e 100644 --- a/Hashing/DataParser.cs +++ b/Hashing/DataParser.cs @@ -225,6 +225,8 @@ namespace Util public static byte[] getNewConnectionJson(string user) { + if (user == null) + throw new ArgumentNullException("user null"); dynamic data = new { username = user diff --git a/Server/Client.cs b/Server/Client.cs index 2184dcf..ed8e0c0 100644 --- a/Server/Client.cs +++ b/Server/Client.cs @@ -97,16 +97,17 @@ namespace Server switch (identifier) { case DataParser.LOGIN: - handleLogin(payloadbytes); + if (handleLogin(payloadbytes)) + communication.NewLogin(this); break; case DataParser.LOGIN_DOCTOR: - if (communication.doctor != null) + if (communication.Doctor != null) return; if (handleLogin(payloadbytes)) { - communication.doctor = this; - Console.WriteLine("Set doctor to " + communication.doctor + " , this is " + this); + communication.Doctor = this; + Console.WriteLine("Set doctor to " + communication.Doctor + " , this is " + this); } break; case DataParser.START_SESSION: @@ -136,7 +137,7 @@ namespace Server else if (DataParser.isRawData(message)) { // print the raw data - Console.WriteLine(BitConverter.ToString(payloadbytes)); + //Console.WriteLine(BitConverter.ToString(payloadbytes)); // TODO change, checking for length is not that safe if (payloadbytes.Length == 8) { @@ -168,7 +169,6 @@ namespace Server this.username = username; sendMessage(DataParser.getLoginResponse("OK")); sendMessage(DataParser.getStartSessionJson()); - communication.NewLogin(this); return true; } else diff --git a/Server/Communication.cs b/Server/Communication.cs index 1169597..d064de4 100644 --- a/Server/Communication.cs +++ b/Server/Communication.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO.Pipes; using System.Linq; using System.Net.Sockets; @@ -13,7 +14,24 @@ namespace Server { private TcpListener listener; private List clients; - public Client doctor; + private Client mDoctor; + public Client Doctor + { + get + { + return this.mDoctor; + } + set + { + this.mDoctor = value; + this.clients.ForEach((client) => + { + var dinges = DataParser.getNewConnectionJson(client.username); + Debug.WriteLine("foreach " + Encoding.ASCII.GetString(dinges)); + this.mDoctor.sendMessage(dinges); + }); + } + } public Communication(TcpListener listener) { this.listener = listener; @@ -34,7 +52,7 @@ namespace Server var tcpClient = listener.EndAcceptTcpClient(ar); Console.WriteLine($"Client connected from {tcpClient.Client.RemoteEndPoint}"); - clients.Add(new Client(this, tcpClient)); + new Client(this, tcpClient); listener.BeginAcceptTcpClient(new AsyncCallback(OnConnect), null); } @@ -45,15 +63,19 @@ namespace Server public void NewLogin(Client client) { - if (doctor == null) + clients.Add(client); + var dinges = DataParser.getNewConnectionJson(client.username); + Debug.WriteLine("new login" + Encoding.ASCII.GetString(dinges)); + Doctor?.sendMessage(dinges); + } + + public void LogOff(Client client) + { + if (this.Doctor == client) { - doctor = client; + this.Doctor = null; } - else - { - doctor.sendMessage(DataParser.getNewConnectionJson(client.username)); - } - + this.clients.Remove(client); } } }