Example #1
0
        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);
        }
Example #2
0
        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);
        }