diff --git a/PolyChat/Controller.cs b/PolyChat/Controller.cs index b272f6a..87c9a9e 100644 --- a/PolyChat/Controller.cs +++ b/PolyChat/Controller.cs @@ -39,7 +39,14 @@ namespace PolyChat public void Connect(string ip) { Debug.WriteLine("--- Controller.Connect ---"); - Connections.Add(ip, new Connection(ip, PORT, Data => OnMessage(ip, Data), CloseChat)); + if (isInConnections(ip)) + { + Debug.WriteLine("---- We have an active connection to this client. ABORT! ----"); + CloseChatUI(ip); + //Todo show error! + } + else + Connections.Add(ip, new Connection(ip, PORT, Data => OnMessage(ip, Data), CloseChat)); } private void Serve() @@ -58,9 +65,16 @@ namespace PolyChat { Debug.WriteLine("--- initial packet received ---"); string ForeignIp = data[0].ToString(); - //Todo deserialize inital packet and extract ip address - Connections.Add(ForeignIp, new Connection(socket, Data => OnMessage(ForeignIp, Data), CloseChat)); - UIController.OnIncomingConnection(ForeignIp); + if (isInConnections(ForeignIp)) + { + Debug.WriteLine("---- We have an active connection to this client. ABORT! ----");//Todo show error! + CloseChatUI(ForeignIp); + } + else + { + Connections.Add(ForeignIp, new Connection(socket, Data => OnMessage(ForeignIp, Data), CloseChat)); + UIController.OnIncomingConnection(ForeignIp); + } }); }); } @@ -93,11 +107,23 @@ namespace PolyChat { Connections[IP].Close(); Connections.Remove(IP); + CloseChatUI(IP,wasConnected); + } + + private void CloseChatUI(string IP, bool wasConnected = true) + { UIController.OnChatPartnerDeleted(IP); - if(!wasConnected) + if (!wasConnected) UIController.ShowConnectionError("Connection close", IP, $"Connection to {IP} failed..."); } + private bool isInConnections(string IP) + { + if(Connections.ContainsKey(IP)) + return true; + return false; + } + public string getIP() { IPHostEntry ipEntry = Dns.GetHostEntry(Dns.GetHostName()); diff --git a/PolyChat/Models/Connection.cs b/PolyChat/Models/Connection.cs index 971e6af..b1d8600 100644 --- a/PolyChat/Models/Connection.cs +++ b/PolyChat/Models/Connection.cs @@ -92,5 +92,10 @@ namespace PolyChat.Models { return Connected; } + + public string getIP() + { + return IP; + } } }