private void OnQueryReceive(object sender, MessageEventArgs e)
        {
            fLogger.WriteDebug(string.Format("Query received: {0}", e.EndPoint));

            var pr = FindPeer(e.EndPoint.Address);

            fForm.OnMessageReceived(pr, e.Data.EncodeAsString());

            string queryType = e.Data.Get <BString>("q").ToString();
            var    args      = e.Data.Get <BDictionary>("a");

            switch (queryType)
            {
            case "handshake":
                SendData(e.EndPoint, ProtocolHelper.CreateHandshakeResponse());
                break;

            case "getpeerinfo":
                SendData(e.EndPoint, ProtocolHelper.CreateGetPeerInfoResponse());
                break;

            case "chat":
                var    msgdata = args.Get <BString>("msg").Value;
                string msg     = Encoding.UTF8.GetString(msgdata);
                fForm.OnMessageReceived(pr, msg);
                break;
            }
        }
        private void OnQueryReceive(object sender, MessageEventArgs e)
        {
            fLogger.WriteDebug("Query received: {0} :: {1}", e.EndPoint, e.Data.EncodeAsString());

            var pr = FindPeer(e.EndPoint);

            string queryType = e.Data.Get <BString>("q").ToString();
            var    args      = e.Data.Get <BDictionary>("a");

            switch (queryType)
            {
            case "handshake":
                SendData(e.EndPoint, ProtocolHelper.CreateHandshakeResponse(DHTTransactions.GetNextId(), fDHTClient.LocalID, fLocalPeer.Presence));
                break;

            case "get_peer_info":
                SendData(e.EndPoint, ProtocolHelper.CreateGetPeerInfoResponse(DHTTransactions.GetNextId(), fDHTClient.LocalID, fProfile));
                break;

            case ProtocolHelper.MSG_SIGN_CHAT:
                long timestamp = args.Get <BNumber>("ts").Value;
                try {
                    var    enc     = Convert.ToBoolean(args.Get <BNumber>("enc").Value);
                    var    msgdata = args.Get <BString>("msg").Value;
                    string msg     = Encoding.UTF8.GetString(msgdata);
                    OnMessageReceive(pr, msg, enc);
                } finally {
                    SendData(e.EndPoint, ProtocolHelper.CreateChatResponse(DHTTransactions.GetNextId(), fDHTClient.LocalID, timestamp));
                }
                break;
            }
        }
示例#3
0
        public void Test_CreateGetPeerInfoResponse()
        {
            var peerInfo = new UserProfile();

            peerInfo.Reset();

            var tid    = DHTTransactions.GetNextId();
            var nodeId = DHTId.CreateRandom();
            var msg    = ProtocolHelper.CreateGetPeerInfoResponse(tid, nodeId, peerInfo);

            Assert.IsNotNull(msg);
            // TODO: test contents
        }