Пример #1
0
        private static void OnDataArrivalEvent(byte[] data)
        {
            lock (Locker)
            {
                try
                {
                    var packet = new TeraPacket(data);
                    Logger.Debug("Received packet '" + packet.ID.ToString() + "' from RealmServer");
                    switch (packet.ID)
                    {
                    case PacketHeaderEnum.PlayerCommingMessage:
                        HandlePlayerComming(packet);
                        break;

                    case PacketHeaderEnum.KickPlayerMessage:
                        String      accountName = packet.Reader.ReadString();
                        WorldClient wClient     = WorldServer.Clients.Find(x => x.Account != null && x.Account.Username == accountName);
                        if (wClient != null)
                        {
                            wClient.Disconnect();
                            wClient.OnClose();
                        }
                        else
                        {
                            AccountTable.UpdateLogged(accountName, false);
                        }
                        break;
                    }
                }
                catch (Exception e)
                {
                    Logger.Error("Can't read packet from server : " + e.ToString());
                }
            }
        }
Пример #2
0
 private void m_socket_OnDataArrivalEvent(byte[] data)
 {
     lock (Locker)
     {
         var packet = new TeraPacket(data);
         if (Server != null)
         {
             Logger.Info("Received packet '" + packet.ID.ToString() + "' from server '" + this.Server.ID);
         }
         else
         {
             Logger.Info("Received packet@'" + packet.ID.ToString() + "' from unknown server '");
         }
         switch (packet.ID)
         {
         case PacketHeaderEnum.HelloKeyMessage:
             this.HandleHelloKey(packet);
             if (Server == null)
             {
                 Kick();
             }
             else
             {
                 Server.State = ServerStateEnum.Online;
             }
             break;
         }
     }
 }
Пример #3
0
 public DataPacket(int num, TeraPacket packet)
 {
     this.packet = packet;
     this.num    = num;
     this.type   = packet.type;
     this.size   = packet.size;
     this.opCode = TeraPacketCreator.getOpCode(packet.opCode);
 }
Пример #4
0
 public S_USER_STATUS(TeraPacket packet)
     : base(packet)
 {
     try
     {
         readUInt64(4, "id");
         readByte(12, "status");
     }
     catch { }
 }
Пример #5
0
 public static void Send(TeraPacket packet)
 {
     try
     {
         Logger.Debug("Send packet '" + packet.ID.ToString() + "' to RealmServer");
         socket.Send(packet.GetBytes);
     }
     catch (Exception e)
     {
         Logger.Error("Can't send packet to RealmServer : " + e.ToString());
     }
 }
Пример #6
0
 public C_CHECK_VERSION(TeraPacket packet)
     : base(packet)
 {
     try
     {
         int count = readUInt16(4, "count");
         for (int i = 0; i < count; i++)
         {
             readInt32((ushort)(6 + 12 * i), "NowShift & NextShift");// 4 + 12
             readInt32((ushort)(10 + 12 * i), "Unk1");
             readInt32((ushort)(14 + 12 * i), "Unk2");
         }
     }
     catch { }
 }
Пример #7
0
        private void HandleHelloKey(TeraPacket packet)
        {
            string          key = packet.Reader.ReadString();
            GameServerModel gsm = GameServerTable.Cache.Find(x => x.Key.Equals(key));

            if (gsm != null)
            {
                this.Server = gsm;
                Logger.Info("GameServer " + gsm.ID + " Online");
            }
            else
            {
                Logger.Warn("Unknown key '" + key + "' received");
            }
        }
Пример #8
0
 public void Send(TeraPacket packet)
 {
     try
     {
         if (this.Server != null && this.Server.State != ServerStateEnum.Offline)
         {
             Logger.Debug("Send packet '" + packet.ID.ToString() + "' to server '" + Server.ID + "'");
             this.m_socket.Send(packet.GetBytes);
         }
     }
     catch (Exception e)
     {
         Logger.Error("Can't send packet to world server " + this.Server.ID + " : " + e.ToString());
     }
 }
Пример #9
0
 public S_LOGIN(TeraPacket packet)
     : base(packet)
 {
     try
     {
         ushort start_name = readUInt16(4, "start name"); //4
         ushort end_name   = readUInt16(6, "end name");   //6
         readUInt16(8, "visual len");                     //8
         readUInt32(10, "sex race class");                //10
         readUInt32(14, "model");                         //14
         readUInt64(18, "player id");                     //18
         readUInt64(26, "unique id");                     //26
         readUInt16(61, "level");                         //61
         readString(start_name, "name", end_name);
     }
     catch { }
 }
Пример #10
0
 public S_SPAWN_USER(TeraPacket packet)
     : base(packet)
 {
     try
     {
         ushort name_start        = readUInt16(8, "name start");
         ushort guild_start       = readUInt16(10, "guild start");
         ushort guild_rank_start  = readUInt16(12, "guild rank start");
         ushort guild_title_start = readUInt16(20, "guild title start");
         readUInt64(34, "id");
         //readUInt64(38, "unique id");
         readString(name_start, "name");
         readString(guild_start, "guild");
         readString(guild_rank_start, "guild rank");
         readString(guild_title_start, "guild title");
     }
     catch { }
 }
Пример #11
0
        private bool processRecv()
        {
            if (recvStream.Length < 4)
            {
                return(false);
            }
            ushort length = BitConverter.ToUInt16(recvStream, 0);

            if (recvStream.Length < length)
            {
                return(false);
            }
            var packet = new TeraPacket(getRecvData(length), TeraPacket.Type.Recv);

            lock (teraPackets)
            {
                teraPackets.Enqueue(packet);
            }
            return(true);
        }
Пример #12
0
 void packetLog(TeraPacket p)
 {
     if (flagToPacketLog)
     {
         //Создать директорию и файл
         if (!Directory.Exists("logs"))
         {
             Directory.CreateDirectory("logs");
         }
         if (!Directory.Exists("logs/packets"))
         {
             Directory.CreateDirectory("logs/packets");
         }
         if (packetLogWriter == null)
         {
             packetLogWriter = new StreamWriter(String.Format("logs/packets/Tera_{0}.packet", DateTime.Now.ToString("MMM_dd_HH_mm_ss")));
         }
         packetLogWriter.WriteLine("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), p.ToString());
         packetLogWriter.Flush();
     }
 }
Пример #13
0
 public S_EACH_SKILL_RESULT(TeraPacket packet)
     : base(packet)
 {
     try
     {
         readUInt32(4, "visualeffect+count"); //4
         readUInt64(8, "attacker id");        //8
         readUInt64(16, "target id");         //16
         readUInt32(24, "creature model id"); //24
         readUInt32(28, "skill id");          //28
         //readUInt32("shift 1");//32
         readUInt64(36, "attak id");          //36
         //readUInt32("shift 2");//44
         readUInt32(48, "damage");            //48
         readUInt16(52, "type");              //52
         readByte(54, "crit");                //54
         readByte(55, "електровсплеск");      //55
         readByte(56, "overturned 1");        //56 //Походу крит
         readByte(57, "overturned 2");        //57
     }
     catch { }
 }
Пример #14
0
        private static void HandlePlayerComming(TeraPacket packet)
        {
            string ticket = packet.Reader.ReadString();

            Logger.Debug("New Ticket added whith key " + ticket);
            var account = new AccountModel()
            {
                ID                 = packet.Reader.ReadInt32(),
                Username           = packet.Reader.ReadString(),
                Password           = packet.Reader.ReadString(),
                Pseudo             = packet.Reader.ReadString(),
                Question           = packet.Reader.ReadString(),
                Reponse            = packet.Reader.ReadString(),
                Level              = packet.Reader.ReadInt32(),
                LastIP             = packet.Reader.ReadString(),
                LastConnectionDate = new DateTime(packet.Reader.ReadInt64()),
            };

            TicketController.RegisterTicket(new AccountTicket()
            {
                Ticket = ticket, Account = account, ExpireTime = 0
            });
        }
Пример #15
0
 public S_DESPAWN_PROJECTILE(TeraPacket packet)
     : base(packet)
 {
     readUInt64(4, "id");
 }
Пример #16
0
 public PacketEventArgs(Connection c, TeraPacket p)
 {
     connection = c; packet = p;
 }
Пример #17
0
 public S_DESPAWN_USER(TeraPacket packet) : base(packet)
 {
     readUInt64(4, "id");
 }
Пример #18
0
 public S_SPAWN_PROJECTILE(TeraPacket packet) : base(packet)
 {
     readUInt64(4, "id");
     readUInt64(49, "player id");
 }