public void Process(UDPPackageType pt, byte[] data) { if (_waitfor == pt) { TcpMapService.LogMessage("UDPServer:" + pt); if (pt == UDPPackageType.SessionConnect) { UDPConnectJson udpc = UDPConnectJson.Deserialize(Encoding.UTF8.GetString(data, 16, data.Length - 16)); if (udpc.token != this.ConnectToken) { _sl.RejectConnect(this); return; } byte[] buffprepair = UDPMeta.CreateSessionPrepair(SessionId, ConnectToken); SendToPeer(buffprepair); SendToPeer(buffprepair); _waitfor = UDPPackageType.SessionConfirm; return; } if (pt == UDPPackageType.SessionConfirm) { UDPConnectJson udpc = UDPConnectJson.Deserialize(Encoding.UTF8.GetString(data, 16, data.Length - 16)); if (udpc.token != this.ConnectToken) { _sl.RejectConnect(this); return; } byte[] buffready = UDPMeta.CreateSessionReady(SessionId, ConnectToken); SendToPeer(buffready); SendToPeer(buffready); _waitfor = UDPPackageType.SessionIdle; _reader = new BufferedReader(cts.Token); ThreadPool.QueueUserWorkItem(delegate { _sl._onstream(this, RemoteEndPoint); }); return; } if (pt == UDPPackageType.SessionIdle) { SendToPeer(UDPMeta.CreateSessionIdle(SessionId)); return; } } else { ProcessUDPPackage(pt, data); } }