示例#1
0
        public void OnClientPingConfig()
        {
            try
            {
                PayloadWriter pWriter = new PayloadWriter();

                byte[] plContent = { 0x00, 0x00, 0x0F, 0xA0, 0x00, 0x00, 0x0F, 0xA0, 0x00, 0x00, 0x0F, 0xA0,
                                     0x00, 0x00, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent);

                OutPacket oPacket = new OutPacket(pWriter.GetPayload(CenterOpcodes.ENU_CLIENT_PING_CONFIG_ACK), _CryptoHandler,
                                                  _AuthHandler, Prefix, ++Count);

                Send(oPacket);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                Close();
            }
        }
示例#2
0
        public void NotifySHAFile(ClientSession cs)
        {
            try
            {
                PayloadWriter pWriter = new PayloadWriter();
                pWriter.WriteData(0);
                pWriter.WriteData(SHAFileList.Length);

                for (int i = 0; i <= SHAFileList.Length - 1; i++)
                {
                    pWriter.WriteData(SHAFileList[i].Length * 2);
                    pWriter.WriteData(SHAFileList[i]);
                }

                OutPacket oPacket = new OutPacket(pWriter.GetPayload(CenterOpcodes.ENU_SHAFILENAME_LIST_ACK), cs._CryptoHandler,
                                                  cs._AuthHandler, cs.Prefix, ++cs.Count);

                cs.Send(oPacket);
            }
            catch
            {
            }
        }
示例#3
0
        public void SendChannelNews(ClientSession cs)
        {
            try
            {
                PayloadWriter pWritter = new PayloadWriter();

                byte[] plContent = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
                pWritter.WriteData(plContent);

                OutPacket oPacket = new OutPacket(pWritter.GetPayload(CenterOpcodes.ENU_CHANNEL_NEWS_NOT),
                                                  cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                cs.Send(oPacket);
            }
            catch (Exception ex)
            {
                Log.Error("ChannelNews: {0}", ex.Message);
                while (true)
                {
                    ;
                }
            }
        }
示例#4
0
        public ClientSession(Socket socket) : base(socket)
        {
            Log.Inform("Cliente conectado.");

            IP = BitConverter.ToUInt32(IPAddress.Parse(GetIP()).GetAddressBytes(), 0);

            InitiateReceive(2, true);

            // Generate new security keys
            CryptoKey      = Generate.Key();
            _CryptoHandler = new CryptoHandler(CryptoKey);

            AuthKey      = Generate.Key();
            _AuthHandler = new AuthHandler(AuthKey);

            short TempPrefix = Generate.Prefix();

            try
            {
                PayloadWriter pWriter = new PayloadWriter();

                pWriter.WriteData(TempPrefix);
                pWriter.WriteData((int)8);
                pWriter.WriteData(_AuthHandler.HmacKey);
                pWriter.WriteData((int)8);
                pWriter.WriteData(_CryptoHandler.Key);

                byte[] plContent = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent);

                OutPacket oPacket = new OutPacket(pWriter.GetPayload(CenterOpcodes.SET_SECURITY_KEY_NOT), tempCryptoHandler,
                                                  tempAuthHandler, Prefix, ++Count);

                Send(oPacket);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                Close();
            }

            Prefix = TempPrefix;

            try
            {
                PayloadWriter pWritter = new PayloadWriter();

                byte[] plContent = { 0x00, 0x00, 0x27, 0x10 };
                pWritter.WriteData(plContent);

                OutPacket oPacket = new OutPacket(pWritter.GetPayload(CenterOpcodes.ENU_WAIT_TIME_NOT), _CryptoHandler,
                                                  _AuthHandler, Prefix, ++Count);

                Send(oPacket);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                Close();
            }
        }
示例#5
0
        public void SendServerList(ClientSession cs)
        {
            try
            {
                Database db = new Database();
                db.OpenDB();

                MySqlDataReader sReader = db.Query("SELECT id, name, ip, port, description FROM servers");
                Log.SqlQuerys(db.dbcmd.CommandText);
                DataTable dt = new DataTable();

                dt.Load(sReader);
                sReader.Close();
                db.dbconn.Close();

                int nServers = dt.Rows.Count;

                PayloadWriter pWriter = new PayloadWriter();

                byte[] plContent  = { 0x00, 0x00, 0x01, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
                byte[] plContent1 = { 0x00, 0x00, 0x00, 0x00 };

                pWriter.WriteData(nServers); // Number of servers

                int    serverNumber;
                string serverName;
                string serverIP;
                short  serverPort;
                string serverDesc;

                foreach (DataRow row in dt.Rows)
                {
                    serverNumber = (int)row[0];
                    serverName   = (string)row[1];
                    serverIP     = (string)row[2];
                    serverPort   = (short)row[3];
                    serverDesc   = (string)row[4];

                    // Server info
                    pWriter.WriteData(serverNumber); // Server number
                    pWriter.WriteData(serverNumber); // Server number?
                    pWriter.WriteData(serverName.Length * 2);
                    pWriter.WriteUnicodeString(serverName);
                    pWriter.WriteData(serverIP.Length);
                    pWriter.WriteData(serverIP);
                    pWriter.WriteData(serverPort);
                    pWriter.WriteData(0);               // Atualmente curtiu?
                    pWriter.WriteData(500);             // Likes máximos?
                    pWriter.WriteData(plContent);
                    pWriter.WriteData(serverIP.Length); // Send IP again
                    pWriter.WriteData(serverIP);
                    pWriter.WriteData(serverDesc.Length * 2);
                    pWriter.WriteUnicodeString(serverDesc);
                    pWriter.WriteData(plContent1);
                }

                OutPacket oPacket = new OutPacket(pWriter.GetPayload(CenterOpcodes.ENU_SERVER_LIST_NOT),
                                                  cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                cs.Send(oPacket);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }