private SimhoppMessage SendReceive(SimhoppMessage msg = null, bool broadcast = false) { byte[] data; string responseData; SimhoppMessage responseMsg; if (msg == null && !Messages.TryDequeue(out msg)) { try { client.Client.ReceiveTimeout = 1000; data = client.Receive(ref ipep); responseData = Encoding.ASCII.GetString(data); responseMsg = SimhoppMessage.Deserialize(responseData); return(responseMsg); } catch (Exception) { return(null); } } if (msg == null) { return(null); } data = Encoding.ASCII.GetBytes(msg.Serialize()); int tries = 0; while (true) { tries++; try { //Öka timeout för vaje försök client.Client.ReceiveTimeout = 1000 + Math.Min(tries * 100, 10000); if (broadcast) { data = Encoding.ASCII.GetBytes(SimhoppMessage.PingMessage().Serialize()); client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, 60069)); } else { client.Send(data, data.Length, ipep); } data = client.Receive(ref ipep); break; } catch (SocketException ex) { LogMessage(SimhoppMessage.ErrorMessage(Encoding.ASCII.GetString(data))); ExceptionHandler.Handle(ex); } } responseData = Encoding.ASCII.GetString(data); responseMsg = SimhoppMessage.Deserialize(responseData); return(responseMsg); }