public async void SendMessageAsync(IBaseMessage message)
        {
            byte[] messageToSend = Serializer.Serialize(message);

            if (messageToSend.Length > MaxPacketSize)
            {
                OnMessageSendFailure?.Invoke(this, new SendFailureException("Message is too large to send", message));
                return;
            }

            IPEndPoint ipEndPoint = PeerManager.GetPeerIPEndPoint(message.To);

            if (ipEndPoint == null)
            {
                OnMessageSendFailure?.Invoke(this, new SendFailureException("Failed to convert recipient to IPEndPoint", message));
                return;
            }

            if (await UDPClient.SendAsync(messageToSend, ipEndPoint))
            {
                return;
            }

            OnMessageSendFailure?.Invoke(this, new SendFailureException("Failed when sending message", message));
        }
Example #2
0
 public async Task <bool> SendAsync(byte[] messageBytes, IPEndPoint ipEndPoint)
 {
     try
     {
         _isSocketReady.WaitOne();
         return(await _udpClient.SendAsync(messageBytes, messageBytes.Length, ipEndPoint) > 0);
     }
     catch (Exception e)
     {
         OnMessageSendFailure?.Invoke(this, new SendFailureException($"Error sending message to {ipEndPoint}", e, null));
         RebuildUdpClient();
         return(false);
     }
 }
        protected bool DisposedValue; // To detect redundant calls

        public UDPNetworking(IPeerIdentification peerName, IPeerManager peerManager, ISerializer serializer, IPEndPoint ipEndPoint)
        {
            PeerName    = peerName;
            PeerManager = peerManager;
            Serializer  = serializer;

            UDPClient = new UDPClient(ipEndPoint);
            UDPClient.OnMessageReceived +=
                (sender, udpResult) => RecieveMessageAsync(udpResult.Buffer, udpResult.RemoteEndPoint);
            UDPClient.OnMessageReceivedFailure +=
                (sender, exception) => OnMessageReceivedFailure?.Invoke(sender, exception);
            UDPClient.OnMessageSendFailure +=
                (sender, exception) => OnMessageSendFailure?.Invoke(sender, exception);
            UDPClient.WaitForStartup();
        }