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)); }
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(); }