Example #1
0
        public void OnData()
        {
            PacketReader packet = null;

            if (PacketQueue.Count > 0)
            {
                packet = (PacketReader)PacketQueue.Dequeue();
            }
            else
            {
                packet = new PacketReader(DataBuffer);
            }

            string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port;

            PacketLog.WritePacket(clientInfo, null, packet);

            if (Enum.IsDefined(typeof(ClientMessage), packet.Opcode))
            {
                PacketManager.InvokeHandler(ref packet, this, (ClientMessage)packet.Opcode);
            }
            else
            {
                Log.Message(LogType.DUMP, "UNKNOWN OPCODE: {0} (0x{1:X}), LENGTH: {2}", packet.Opcode, (ushort)packet.Opcode, packet.Size);
            }
        }
Example #2
0
        public void Send(PacketWriter packet)
        {
            if (packet.Opcode == 0)
            {
                return;
            }

            var buffer = packet.ReadDataToSend();

            if (Crypt.IsInitialized)
            {
                uint totalLength = (uint)packet.Size - 2;
                totalLength <<= 12;
                totalLength  |= ((uint)packet.Opcode & 0xFFF);

                var header = BitConverter.GetBytes(totalLength);

                Crypt.Encrypt(header);

                buffer[0] = header[0];
                buffer[1] = header[1];
                buffer[2] = header[2];
                buffer[3] = header[3];
            }

            var args = SocketAsyncEventArgsPool.Acquire();

            args.SetBuffer(buffer, 0, buffer.Length);
            args.Completed += OnSend;

            try
            {
                if (!clientSocket.SendAsync(args))
                {
                    OnSend(this, args);
                }
            }
            catch (Exception ex)
            {
                args.Completed -= OnSend;
                SocketAsyncEventArgsPool.Release(args);
                Disconnect();

                if (ex is ObjectDisposedException)
                {
                    return;
                }

                if (ex is SocketException)
                {
                    Log.outException(ex);
                    return;
                }

                throw;
            }

            Log.outDebug("Sent Opcode: 0x{0:X} ({0}) to Player: {1}", packet.Opcode, GetAccount() == null ? 0 : GetAccountId());
            PacketLog.WritePacket(clientSocket.RemoteEndPoint.ToString(), packet);
        }
Example #3
0
        public void OnData()
        {
            try
            {
                PacketReader packet = null;
                if (PacketQueue.Count > 0)
                {
                    packet = (PacketReader)PacketQueue.Dequeue();
                }
                else
                {
                    packet = new PacketReader(ReceiveBuffer);
                }

                PacketLog.WritePacket(clientSocket.RemoteEndPoint.ToString(), null, packet);

                if (Enum.IsDefined(typeof(Opcodes), packet.Opcode))
                {
                    PacketManager.InvokeHandler(ref packet, this, (Opcodes)packet.Opcode);
                }
                else
                {
                    Log.outDebug("Received unknown opcode 0x{0:X} ({0}) from AcountId:{1}", (ushort)packet.Opcode, GetAccountId());
                }
            }
            catch (Exception ex)
            {
                Log.outException(ex);
            }
        }
Example #4
0
        public void OnData()
        {
            PacketReader packet = null;

            if (PacketQueue.Count > 0)
            {
                packet = (PacketReader)PacketQueue.Dequeue();
            }
            else
            {
                packet = new PacketReader(DataBuffer);
            }

            string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port;

            PacketLog.WritePacket(clientInfo, null, packet);

            PacketManager.InvokeHandler(ref packet, this);
        }
Example #5
0
        public void Send(ref PacketWriter packet)
        {
            if (packet.Opcode == 0)
            {
                return;
            }

            var buffer = packet.ReadDataToSend();

            try
            {
                if (Crypt.IsInitialized)
                {
                    uint totalLength = (uint)packet.Size - 2;
                    totalLength <<= 13;
                    totalLength  |= ((uint)packet.Opcode & 0x1FFF);

                    var header = BitConverter.GetBytes(totalLength);

                    Crypt.Encrypt(header);

                    buffer[0] = header[0];
                    buffer[1] = header[1];
                    buffer[2] = header[2];
                    buffer[3] = header[3];
                }

                clientSocket.Send(buffer, 0, buffer.Length, SocketFlags.None);

                string clientInfo = ((IPEndPoint)clientSocket.RemoteEndPoint).Address + ":" + ((IPEndPoint)clientSocket.RemoteEndPoint).Port;
                PacketLog.WritePacket(clientInfo, packet);

                packet.Flush();
            }
            catch (Exception ex)
            {
                Log.Message(LogType.ERROR, "{0}", ex.Message);
                Log.Message();

                clientSocket.Close();
            }
        }