Пример #1
0
        protected void SystemCmds(SocketUser user, Data data)
        {
            byte cmd = data.Buffer[0];
            data.Buffer = BufferUtils.RemoveFront(BufferUtils.Remove.CMD, data.Buffer);
            switch (cmd)
            {
                case 0x02: // udp enable
                    //Logger.Log("{0}: Udp enabled", user.SessionToken);
                    int port = BitConverter.ToInt32(data.Buffer, 0);
                    user.EnableUdp(port);
                    user.Send(0xff, new byte[] { 0x02 }, Protocal.Udp);
                    UserUdpEnabled(user);
                    break;

                case 0x03: // ping
                    bool pingBack = BitConverter.ToBoolean(data.Buffer, 0);
                    if (pingBack)
                    {
                        user.Send(0xff, BufferUtils.AddFirst(0x03, BitConverter.GetBytes(false)), data.Type);
                    }
                    UserPinged(user, data.Type, pingBack);
                    break;

                default:
                    Logger.LogError("Received invalid system command: {0}", cmd);
                    break;
            }
        }
Пример #2
0
 private void Ping(Protocal type)
 {
     if (type == Protocal.Udp && !udpStarted)
     {
         return;
     }
     // sending "true" to tell server to ping back.
     Send(255, BufferUtils.AddFirst(0x03, BitConverter.GetBytes(true)), type);
 }
Пример #3
0
    private void SystemCmds(Data data)
    {
        byte cmd = data.Buffer[0];

        data.Buffer = BufferUtils.RemoveFront(BufferUtils.Remove.CMD, data.Buffer);
        switch (cmd)
        {
        case 0x01:     // connected.
            if (data.Buffer[0] == 0x01)
            {
                UdpID = BitConverter.ToUInt16(data.Buffer, 1);
                StartTcpPing();
                if (OnConnectSuccess != null)
                {
                    OnConnectSuccess();
                }
            }
            else
            {
                if (OnConnectFailed != null)
                {
                    OnConnectFailed();
                }
                Close();
            }
            break;

        case 0x02:     // udp enabled
            udpConnected = true;
            if (OnUdpEnabled != null)
            {
                OnUdpEnabled();
            }
            break;

        case 0x03:     // ping.
            bool pingBack = BitConverter.ToBoolean(data.Buffer, 0);
            if (pingBack)
            {
                Send(0xff, BufferUtils.AddFirst(0x03, BitConverter.GetBytes(false)), data.Type);
            }
            break;

        case 0x04:     // server closed.
            if (OnServerStoped != null)
            {
                OnServerStoped();
            }
            Close();
            break;

        default:
            SafeDebug.LogError("Received invalid system command: " + cmd);
            break;
        }
    }
Пример #4
0
 public void UdpConnect()
 {
     udpClient = new UdpClient();
     udpClient.Connect(Host, UdpPort);
     endPoint     = udpClient.Client.RemoteEndPoint as IPEndPoint;
     UdpLocalPort = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port;
     SafeDebug.Log(string.Format("UDP client starting: {0}, {1}, {2}", UdpLocalPort, endPoint.Port, endPoint.Address.ToString()));
     udpStarted = true;
     BegineReceiveUDP();
     Send(0xff, BufferUtils.AddFirst(0x02, BitConverter.GetBytes(UdpLocalPort)), Protocal.Udp);
     StartUdpPing();
 }
Пример #5
0
 public void Send(byte cmd, byte[] data, Protocal type = Protocal.Tcp)
 {
     Send(BufferUtils.AddFirst(cmd, data), type);
 }
Пример #6
0
 private byte[] InsertCommand(byte command, byte[] data)
 {
     return(BufferUtils.AddFirst(command, data));
 }