internal void EnqueueSend(DhtMessage message, IPEndPoint endpoint) { //if (endpoint.Address.Equals(IPAddress.Any) || IPAddress.IsLoopback(endpoint.Address)) // return; lock (_locker) { if (message.TransactionId == null) { if (message is ResponseBase) { throw new ArgumentException("Message must have a transaction id"); } do { message.TransactionId = TransactionId.NextId(); } while (MessageFactory.IsRegistered(message.TransactionId)); } // We need to be able to cancel a query message if we time out waiting for a response QueryBase queryMessage = message as QueryBase; if (queryMessage != null) { MessageFactory.RegisterSend(queryMessage); } _sendQueue.Enqueue(new SendDetails(endpoint, message)); } }
public void Send(DhtMessage msg, IPEndPoint endpoint) { if (msg.TransactionId == null) { if (msg is ResponseMessage) { //throw new ArgumentException("Message must have a transaction id"); } msg.TransactionId = TransactionId.NextId(); } var buffer = msg.Encode(); udpSocketListener.Send(buffer, endpoint); }