Esempio n. 1
0
        private void DataReceived(IAsyncResult res)
        {
            if (_alive)
            {
                var endPoint = (IPEndPoint)res.AsyncState;
                try
                {
                    var data = _client.EndReceive(res, ref endPoint);
                    if (data.Length > 0)
                    {
                        var message = Message.Deserialise(data);

                        var connectionId = message.ConnectionId.GetString();
                        if (!string.IsNullOrEmpty(connectionId))
                        {
                            UdpAddress from;
                            if (!_addresses.TryGetValue(connectionId, out from))
                            {
                                from = new UdpAddress(endPoint.Address.ToString(), endPoint.Port);
                                _addresses[connectionId] = from;
                            }
                            HandleMessage(message, from);
                        }
                    }
                }
                catch
                { // Needs to stay alive
                }
                ReceiveData(endPoint);
            }
        }
Esempio n. 2
0
 private void Send(UdpAddress address, byte[] data)
 {
     var send = new Task(() =>
         {
             lock (_client)
             {
                 var res = _client.Send(data, data.Length, address.Host, address.Port);
                 if (res != data.Length)
                 {
                     throw new Exception("Did not send the entire message");
                 }
             }
         });
     send.Start();
 }