コード例 #1
0
        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));
            }
        }
コード例 #2
0
ファイル: DHTSpider.cs プロジェクト: yuxi214/DHTSpider
        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);
        }