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; } }
public void Test_CreateHandshakeResponse() { var tid = DHTTransactions.GetNextId(); var nodeId = DHTId.CreateRandom(); var msg = ProtocolHelper.CreateHandshakeResponse(tid, nodeId, PresenceStatus.Online); Assert.IsNotNull(msg); // TODO: test contents }