Beispiel #1
0
 private void MsgHandler_RequestMetafile(Client client, ClientPacket msg)
 {
     if (!msg.ReadBoolean())
     {
         string fileName = msg.ReadString(msg.ReadByte());
         if (GameServer.MetafileDatabase.ContainsKey(fileName))
         {
             var p = new ServerPacket(0x6F);
             p.WriteByte(0);
             p.WriteString8(fileName);
             p.WriteUInt32(GameServer.MetafileDatabase[fileName].Checksum);
             p.WriteUInt16((ushort)GameServer.MetafileDatabase[fileName].RawData.Length);
             p.Write(GameServer.MetafileDatabase[fileName].RawData);
             client.Enqueue(p);
         }
     }
     else
     {
         var p = new ServerPacket(0x6F);
         p.WriteByte(1);
         p.WriteUInt16((ushort)GameServer.MetafileDatabase.Count);
         foreach (var kvp in GameServer.MetafileDatabase)
         {
             p.WriteString8(kvp.Value.Name);
             p.WriteUInt32(kvp.Value.Checksum);
         }
         client.Enqueue(p);
     }
 }
Beispiel #2
0
        private void MsgHandler_ServerTable(Client client, ClientPacket msg)
        {
            bool mismatch = msg.ReadBoolean();
            int  serverId = msg.ReadByte();

            if (mismatch)
            {
                var p = new ServerPacket(0x56);
                p.WriteUInt16((ushort)Program.RawData.Length);
                p.Write(Program.RawData);
                client.Enqueue(p);
            }
            else
            {
                Redirection r = new Redirection();
                r.DestinationServer    = Program.GameServers[serverId].LoginServer;
                r.EncryptionParameters = client.EncryptionParams;
                r.Name         = String.Format(String.Empty, r.ID);
                r.SourceServer = this;
                client.Redirect(r);
            }
        }