diff --git a/ClientApp/Utils/EngineConnection.cs b/ClientApp/Utils/EngineConnection.cs index 4fe35a3..6e3f846 100644 --- a/ClientApp/Utils/EngineConnection.cs +++ b/ClientApp/Utils/EngineConnection.cs @@ -44,7 +44,7 @@ namespace ClientApp.Utils private static string groundPlaneId = string.Empty; private static string terrainId = string.Empty; - public string DoctorMessage { get; set; }; + public string DoctorMessage { get; set; } public float BikeSpeed { get; set; } public float BikePower { get; set; } public float BikeBPM { get; set; } @@ -75,7 +75,7 @@ namespace ClientApp.Utils noVRResponseTimer.Elapsed += noVRResponseTimeout; noVRResponseTimer.AutoReset = false; noVRResponseTimer.Enabled = false; - + } private void UpdateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) diff --git a/DoctorApp/Utils/Client.cs b/DoctorApp/Utils/Client.cs index 15669b6..81f245a 100644 --- a/DoctorApp/Utils/Client.cs +++ b/DoctorApp/Utils/Client.cs @@ -130,6 +130,8 @@ namespace DoctorApp.Utils expectedMessageLength = BitConverter.ToInt32(totalBuffer, 0); } + if (ar == null || (!ar.IsCompleted) || (!this.stream.CanRead) || !this.client.Connected) + return; this.stream.BeginRead(this.buffer, 0, this.buffer.Length, new AsyncCallback(OnRead), null); } @@ -192,6 +194,7 @@ namespace DoctorApp.Utils public void Dispose() { Debug.WriteLine("client dispose called"); + sendMessage(DataParser.getDisconnectJson(LoginViewModel.Username)); this.stream.Dispose(); this.client.Dispose(); } diff --git a/Server/Client.cs b/Server/Client.cs index 7a89f5f..0364d38 100644 --- a/Server/Client.cs +++ b/Server/Client.cs @@ -65,7 +65,7 @@ namespace Server } } - if (ar == null || (!ar.IsCompleted) || (!this.stream.CanRead)) + if (ar == null || (!ar.IsCompleted) || (!this.stream.CanRead) || !this.tcpClient.Client.Connected) return; this.stream.BeginRead(this.buffer, 0, this.buffer.Length, new AsyncCallback(OnRead), null); @@ -123,7 +123,7 @@ namespace Server //set resistance on doctor GUI break; case DataParser.DISCONNECT: - communication.Disconnect(this); + communication.LogOff(this); break; default: Console.WriteLine($"Received json with identifier {identifier}:\n{Encoding.ASCII.GetString(payloadbytes)}"); diff --git a/Server/Communication.cs b/Server/Communication.cs index 7a093fc..ec44e4e 100644 --- a/Server/Communication.cs +++ b/Server/Communication.cs @@ -19,11 +19,12 @@ namespace Server set { this.mDoctor = value; - this.clients.ForEach((client) => - { - this.mDoctor.sendMessage(DataParser.getNewConnectionJson(client.username)); - client.sendMessage(DataParser.getNewConnectionJson(this.mDoctor.username)); - }); + if (this.mDoctor != null) + this.clients.ForEach((client) => + { + this.mDoctor.sendMessage(DataParser.getNewConnectionJson(client.username)); + client.sendMessage(DataParser.getNewConnectionJson(this.mDoctor.username)); + }); } } public Communication(TcpListener listener) @@ -50,12 +51,6 @@ namespace Server listener.BeginAcceptTcpClient(new AsyncCallback(OnConnect), null); } - internal void Disconnect(Client client) - { - clients.Remove(client); - Doctor.sendMessage(DataParser.getDisconnectJson(client.username)); - } - public void NewLogin(Client client) { this.clients.Add(client); @@ -76,6 +71,7 @@ namespace Server }); this.Doctor = null; } + Doctor?.sendMessage(DataParser.getDisconnectJson(client.username)); this.clients.Remove(client); }