Esempio n. 1
0
        public void AdminAccountSearchConstructorTest()
        {
            ClientVersion version = ClientVersion.vMAX;

            AdminAccountSearch.AcctSearchType type = AdminAccountSearch.AcctSearchType.Username;
            string             term   = "a username";
            AdminAccountSearch target = new AdminAccountSearch(version, type, term);

            PacketWriter writer = target.GetWriter();

            ClientPacketId        packetidActual  = (ClientPacketId)writer.Packet[0];
            ushort                packetlen       = (ushort)((writer.Packet[1] << 8) | writer.Packet[2]);
            RemoteAdminSubCommand commandidActual = (RemoteAdminSubCommand)writer.Packet[3];

            AdminAccountSearch.AcctSearchType typeActual = (AdminAccountSearch.AcctSearchType)writer.Packet[4];

            string termActual = System.Text.Encoding.ASCII.GetString(writer.Packet, 5, packetlen - 6);

            ClientPacketId        packetidExpected  = ClientPacketId.RemoteAdmin;
            RemoteAdminSubCommand commandidExpected = RemoteAdminSubCommand.AccountSearch;

            AdminAccountSearch.AcctSearchType typeExpected = type;
            string termExpected = term;

            Assert.AreEqual(packetidExpected, packetidActual);
            Assert.AreEqual(commandidExpected, commandidActual);
            Assert.AreEqual(termExpected, termActual);
        }
Esempio n. 2
0
        /// <summary>
        /// Sends message containing only packet id
        /// </summary>
        private static void SendOnlyPacketId(ClientPacketId packetId)
        {
            ByteBuffer buffer = new ByteBuffer();

            buffer.WriteLong((long)packetId);

            SendDataToServer(buffer.ToArray());
        }
Esempio n. 3
0
    byte[] CreatePacket <T>(IPacket <T> data, ClientPacketId Id)
    {
        byte[] msg    = data.GetPacketData();
        byte[] header = CreateHeader(data, Id);
        byte[] packet = CombineByte(header, msg);

        return(packet);
    }
        public NetPacketHandler GetPacketHandler(ClientPacketId id)
        {
            if (!PacketHandlers.TryGetValue(id, out var packetHandler))
            {
                throw new Exception($"Missing packet handler for \"{id}\".");
            }

            return(packetHandler);
        }
Esempio n. 5
0
        public void RegisterClientPacketHandler(ClientPacketId packetId, Action handler)
        {
            if (_clientPacketHandlers.ContainsKey(packetId))
            {
                Logger.Get().Error(this, $"Tried to register already existing client packet handler: {packetId}");
                return;
            }

            _clientPacketHandlers[packetId] = iPacket => { handler(); };
        }
Esempio n. 6
0
        public void DeregisterClientPacketHandler(ClientPacketId packetId)
        {
            if (!_clientPacketHandlers.ContainsKey(packetId))
            {
                Logger.Error(this, $"Tried to remove non-existent client packet handler: {packetId}");
                return;
            }

            _clientPacketHandlers.Remove(packetId);
        }
Esempio n. 7
0
    public void DataRequest(ClientPacketId Id)
    {
        //No Packet
        HeaderData       headerData       = new HeaderData();
        HeaderSerializer HeaderSerializer = new HeaderSerializer();

        headerData.Id = (byte)Id;
        HeaderSerializer.Serialize(headerData);
        byte[] msg = HeaderSerializer.GetSerializedData();

        sendMsg.Enqueue(msg);
    }
Esempio n. 8
0
        public void RegisterClientPacketHandler <T>(ClientPacketId packetId, GenericClientPacketHandler <T> packetHandler)
            where T : IPacketData
        {
            if (_clientPacketHandlers.ContainsKey(packetId))
            {
                Logger.Get().Error(this, $"Tried to register already existing client packet handler: {packetId}");
                return;
            }

            // We can't store these kinds of generic delegates in a dictionary,
            // so we wrap it in a function that casts it
            _clientPacketHandlers[packetId] = iPacket => { packetHandler((T)iPacket); };
        }
Esempio n. 9
0
        /// <summary>
        /// Register a packet handler for the given ID.
        /// </summary>
        /// <param name="packetId">The client packet ID.</param>
        /// <param name="handler">The handler for the data.</param>
        private void RegisterClientPacketHandler(
            ClientPacketId packetId,
            ClientPacketHandler handler
            )
        {
            if (_clientPacketHandlers.ContainsKey(packetId))
            {
                Logger.Get().Error(this, $"Tried to register already existing client packet handler: {packetId}");
                return;
            }

            _clientPacketHandlers[packetId] = handler;
        }
        public void SetPacketHandler(ClientPacketId id, NetPacketHandler packetHandler)
        {
            if (packetHandler == null)
            {
                throw new ArgumentNullException(nameof(packetHandler));
            }

            if (PacketHandlers.ContainsKey(id))
            {
                throw new ArgumentException($"A packet handler is already registered for \"{id}\".", nameof(id));
            }

            PacketHandlers.Add(id, packetHandler);
        }
Esempio n. 11
0
    byte[] CreateHeader <T>(IPacket <T> data, ClientPacketId Id)
    {
        byte[] msg = data.GetPacketData();

        HeaderData       headerData       = new HeaderData();
        HeaderSerializer headerSerializer = new HeaderSerializer();

        headerData.Id     = (byte)Id;
        headerData.length = (short)msg.Length;

        headerSerializer.Serialize(headerData);
        byte[] header = headerSerializer.GetSerializedData();

        return(header);
    }
Esempio n. 12
0
        /// <summary>
        /// Executes the correct packet handler corresponding to this packet data.
        /// </summary>
        /// <param name="packetId">The client packet ID for this data.</param>
        /// <param name="packetData">The packet data instance.</param>
        private void ExecuteClientPacketHandler(ClientPacketId packetId, IPacketData packetData)
        {
            if (!_clientPacketHandlers.ContainsKey(packetId))
            {
                Logger.Get().Warn(this, $"There is no client packet handler registered for ID: {packetId}");
                return;
            }

            // Invoke the packet handler for this ID on the Unity main thread
            ThreadUtil.RunActionOnMainThread(() => {
                try {
                    _clientPacketHandlers[packetId].Invoke(packetData);
                } catch (Exception e) {
                    Logger.Get().Error(this,
                                       $"Exception occured while executing client packet handler for packet ID: {packetId}, message: {e.Message}, stacktrace: {e.StackTrace}");
                }
            });
        }
Esempio n. 13
0
        public void LoginRequestConstructorTest()
        {
            string username = "******";
            string password = "******";

            ClientVersion version = ClientVersion.vMAX;

            LoginRequest target = new LoginRequest(version, username, password, 5);

            PacketWriter writer = target.GetWriter();
            PacketBuffer buffer = new PacketBuffer(writer.Packet);
            PacketReader reader = new PacketReader(version, buffer, (ushort)writer.Length);

            ClientPacketId actualPacketID = (ClientPacketId)reader.ReadByte();
            string         actualUsername = reader.ReadFixedString(30);
            string         actualPassword = reader.ReadFixedString(30);

            Assert.AreEqual(ClientPacketId.LoginRequest, actualPacketID);
            Assert.AreEqual(username, actualUsername);
            Assert.AreEqual(password, actualPassword);
        }
        public void SetPacketHandler <TPacket>(ClientPacketId id, Action <NetConnection, TPacket> handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            Codec.SetPacketHandler(id, delegate(
                                       NetConnection connection,
                                       NetBinaryReader packetReader,
                                       NetPacketDecoder.PacketIdDefinition packetIdDefinition,
                                       out int messageLength)
            {
                var status = connection.ReadPacket <TPacket>(packetReader, out var packet, out messageLength);
                if (status != OperationStatus.Done)
                {
                    return(status);
                }

                handler.Invoke(connection, packet);
                return(OperationStatus.Done);
            });
        }
Esempio n. 15
0
 public PacketStructAttribute(ClientPacketId packetId) : this((int)packetId)
 {
     IsClientPacket = true;
 }
Esempio n. 16
0
 /// <summary>
 /// Register a packet handler for the given ID.
 /// </summary>
 /// <param name="packetId">The client packet ID.</param>
 /// <param name="handler">The handler for the data.</param>
 /// <typeparam name="T">The type of the packet data passed as parameter to the handler.</typeparam>
 public void RegisterClientPacketHandler <T>(
     ClientPacketId packetId,
     GenericClientPacketHandler <T> handler
     ) where T : IPacketData => RegisterClientPacketHandler(packetId, iPacket => handler((T)iPacket));
Esempio n. 17
0
 public void SendGamePacket(ISerializable gamePacket, ClientPacketId packetId, string destinationAddress, ushort destinationPort)
 {
     SendGamePacket(gamePacket, RemoteConnectionType.Client, (uint)packetId, destinationAddress, destinationPort);
 }
Esempio n. 18
0
 /// <summary>
 /// Register a data-independent packet handler for the given ID.
 /// </summary>
 /// <param name="packetId">The client packet ID.</param>
 /// <param name="handler">The handler for the data.</param>
 public void RegisterClientPacketHandler(
     ClientPacketId packetId,
     Action handler
     ) => RegisterClientPacketHandler(packetId, _ => handler());