示例#1
0
        private byte[] ParsePlayerList(Packet packet)
        {
            var LocalIP = new byte[] { 127, 0, 0, 1 };
            var LocalPort = ((uint)7171).GetBytes().Redim(2);

            var index = 2;
            switch (packet.ReadInt(2)) {
                case 0x0A: Output.Add("Error Received: ", packet.ReadString(3)); return null;
                case 0x0B: Output.Add("For your information: ", packet.ReadString(3)); return null;
                case 0x14: Output.Add("MOTD: ", packet.ReadString(3)); index += (3 + packet.ReadString(3).Length); break;
                case 0x1E: Output.Add("Patching Message: ", packet.ReadString(3)); return null;
                case 0x20: Output.Add("New Version: ", packet.ReadString(3)); return null;
            }

            if (packet.ReadInt(index) == 0x64) {
                var charCount = packet.ReadInt(index + 1);

                var addler = index;
                var result = packet.Data;
                for (var i = 0; i < charCount; i++) {

                    addler += 2;
                    var charName = packet.ReadString(addler);

                    addler += charName.Length + 2;
                    var serverName = packet.ReadString(addler);

                    addler += serverName.Length + 2;
                    var serverIP = packet.ReadBytes(addler, 4);
                    result = result.Replace(LocalIP, addler);

                    addler += 4;
                    var serverPort = packet.ReadShort(addler);
                    result = result.Replace(LocalPort, addler);

                    chars.Add(new PlayerList(charName, serverName, serverIP, serverPort.ToInt32()));
                }
                return result;
            }
            return null;
        }
示例#2
0
        /// <summary>
        /// Fill Player List and Change the Server IP Address to Local.
        /// </summary>
        /// <param name="data">Player List Server Packet.</param>
        protected byte[] ParsePlayerList(byte[] data)
        {
            if (data == null) { return null; }

            var localIP = IPLocal.GetAddressBytes().Redim(4);
            var localPort = LocalPort.ToUInt32().GetBytes().Redim(2);
            var packet = new Packet() { Data = data, ConnectionSource = this };
            PlayerList = new List<PlayerList>();

            var index = 2;
            switch (packet.ReadInt(2)) {
                case 0x0A: Output.Add("Error Received: ", packet.ReadString(3)); return null;
                case 0x0B: Output.Add("For your information: ", packet.ReadString(3)); return null;
                case 0x14: Output.Add("MOTD: ", packet.ReadString(3)); index += (3 + packet.ReadString(3).Length); break;
                case 0x1E: Output.Add("Patching Message: ", packet.ReadString(3)); return null;
                case 0x20: Output.Add("New Version: ", packet.ReadString(3)); return null;
            }

            if (packet.ReadInt(index) == 0x64) {
                var charCount = packet.ReadInt(index + 1);

                var addler = index;
                var result = packet.Data;
                for (var i = 0; i < charCount; i++) {

                    addler += 2;
                    var charName = packet.ReadString(addler);

                    addler += charName.Length + 2;
                    var serverName = packet.ReadString(addler);

                    addler += serverName.Length + 2;
                    var serverIP = packet.ReadBytes(addler, 4);
                    result = result.Replace(localIP, addler);

                    addler += 4;
                    var serverPort = packet.ReadShort(addler);
                    result = result.Replace(localPort, addler);

                    PlayerList.Add(new PlayerList(charName, serverName, serverIP, serverPort.ToInt32()));
                }
                return result;
            }
            return null;
        }