public NodeMessage SendMessageSync(IPEndPoint toEndPoint, NodeMessage msg, int timeout) { if (msg.IsRequest) { msg.Seq = GenerateSeq(); } ManualResetEventSlim eventReset = new ManualResetEventSlim(); msg.AddCallback((m) => eventReset.Set()); ulong msgId = GetMessageId(toEndPoint.Address, msg.Seq); _messages.AddOrUpdate(msgId, msg, (k, v) => v); byte[] rawMsg = msg.ToBytes(); _udpClient.Send(rawMsg, rawMsg.Length, toEndPoint); if (eventReset.Wait(timeout)) { NodeMessage msgFromQueue; if (_messages.TryRemove(msgId, out msgFromQueue)) { return(msgFromQueue); } } return(msg); }
public void SendMessage(IPEndPoint toEndPoint, NodeMessage msg) { if (msg.IsRequest) { throw new InvalidOperationException("Message can't be request"); } byte[] rawMsg = msg.ToBytes(); _udpClient.Send(rawMsg, rawMsg.Length, toEndPoint); }