Ejemplo n.º 1
0
            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);
                }
            }