public virtual void Read(NetworkPacket packet, NetworkFormat format)
        {
            if (format.Secured)
            {
                Encryption.Transform(packet);

                if (format.Command == 0x39 || format.Command == 0x3A)
                {
                    TransFormDialog(packet);
                    Reader.Position = 6;
                }
                else
                {
                    Reader.Position = 0;
                }
            }
            else
            {
                Reader.Position = -1;
            }

            if (ServerContext.Config?.LogRecvPackets ?? false)
            {
                Console.WriteLine("r: {0}", packet);
            }


            Reader.Packet = packet;
            format.Serialize(Reader);
        }
        public virtual void Read(NetworkPacket packet, NetworkFormat format)
        {
            _lock.TryEnterReadLock(Timeout.Infinite);
            {
                if (format.Secured)
                {
                    Encryption.Transform(packet);

                    switch (format.Command)
                    {
                    case 0x39:
                    case 0x3A:
                        TransFormDialog(packet);
                        Reader.Position = 6;
                        break;

                    default:
                        Reader.Position = 0;
                        break;
                    }
                }
                else
                {
                    Reader.Position = -1;
                }
                Reader.Packet = packet;
                format.Serialize(Reader);
            }
            _lock.ExitReadLock();
        }
        public void Read(NetworkPacket packet, NetworkFormat format)
        {
            if (packet == null)
            {
                return;
            }

            if (format.Secured)
            {
                Encryption.Transform(packet);

                switch (format.Command)
                {
                case 0x39:
                case 0x3A:
                    TransFormDialog(packet);
                    Reader.Position = 6;
                    break;

                default:
                    Reader.Position = 0;
                    break;
                }
            }
            else
            {
                Reader.Position = -1;
            }

            Reader.Packet = packet;
            format.Serialize(Reader);
            Reader.Position = -1;
        }
Esempio n. 4
0
        public void Read(NetworkPacket packet, NetworkFormat format)
        {
            if (packet == null)
            {
                return;
            }

            lock (Reader)
            {
                if (format.Secured)
                {
                    Encryption.Transform(packet);

                    if (format.Command == 0x39 || format.Command == 0x3A)
                    {
                        TransFormDialog(packet);
                        Reader.Position = 0x6;
                    }
                    else
                    {
                        Reader.Position = 0x0;
                    }
                }
                else
                {
                    Reader.Position = -0x1;
                }

                Reader.Packet = packet;
                format.Serialize(Reader);
                Reader.Position = -0x1;
            }
        }
        public void FlushAndSend(NetworkFormat format)
        {
            lock (syncLock)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);

                var packet = Writer.ToPacket();
                if (packet == null)
                {
                    return;
                }

                if (format.Secured)
                {
                    Encryption.Transform(packet);
                }

                var array = packet.ToArray();
                ServerSocket.Send(array, array.Length, SocketFlags.None);
            }
        }
Esempio n. 6
0
        public override void Read(NetworkPacket packet, NetworkFormat format)
        {
            if (format.Secured)
            {
                Encryption.Transform(packet);
            }

            Reader.Packet = packet;
            format.Serialize(Reader);
        }
        private void PreparePacketWriter(NetworkFormat format)
        {
            Writer.Position = 0;
            Writer.Write(format.Command);

            if (format.Secured)
            {
                Writer.Write(Ordinal++);
            }

            format.Serialize(Writer);
        }
        private bool GetPacket(NetworkFormat format)
        {
            Writer.Position = 0;
            Writer.Write(format.Command);

            if (format.Secured)
            {
                Writer.Write(Ordinal++);
            }

            format.Serialize(Writer);
            return(true);
        }
        private NetworkPacket GetPacket(NetworkFormat format)
        {
            lock (Writer)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);
                return(Writer.ToPacket());
            }
        }
        public void FlushAndSend(NetworkFormat format)
        {
            if (Session.ConnectedSocket == null)
            {
                return;
            }

            if (!Session.ConnectedSocket.Connected)
            {
                return;
            }

            lock (Writer)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);

                var packet = Writer.ToPacket();
                if (packet == null)
                {
                    return;
                }

                if (format.Secured)
                {
                    Encryption.Transform(packet);
                }

                var array = packet.ToArray();

                if (Session.ConnectedSocket.Connected)
                {
                    Session.ConnectedSocket.Send(array, SocketFlags.None);
                }
            }
        }
        public NetworkClient <TClient> Send(NetworkFormat format)
        {
            if (this is LoginClient)
            {
                FlushAndSend(format);
                return(this);
            }

            lock (syncLock)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);

                var packet = Writer.ToPacket();
                if (packet == null)
                {
                    return(null);
                }

                if (format.Secured)
                {
                    Encryption.Transform(packet);
                }


                var array = packet.ToArray();
                SendBuffer.Enqueue(array);
                //FlushBuffers();
            }

            return(this);
        }
        public void FlushAndSend(NetworkFormat format)
        {
            if (!Socket.Connected)
            {
                return;
            }

            lock (_sendLock)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);

                var packet = Writer.ToPacket();
                if (packet == null)
                {
                    return;
                }

                if (format.Secured)
                {
                    Encryption.Transform(packet);
                }

                var buffer = packet.ToArray();

                if (buffer.Length <= 0)
                {
                    return;
                }

                if (_sending)
                {
                    return;
                }

                _sending = true;

                try
                {
                    Socket.BeginSend(
                        buffer,
                        0,
                        buffer.Length,
                        SocketFlags.None,
                        SendCompleted,
                        Socket
                        );
                }
                catch (SocketException)
                {
                    //ignore
                }
            }
        }
        private void SendFormat(NetworkFormat format)
        {
            if (format == null)
            {
                return;
            }

            lock (Writer)
            {
                Writer.Position = 0;
                Writer.Write(format.Command);

                if (format.Secured)
                {
                    Writer.Write(Ordinal++);
                }

                format.Serialize(Writer);

                var packet = Writer.ToPacket();


                if (_lastFormat == format.Command)
                {
                    ++_matches;
                }
                else
                {
                    _lastFormat = format.Command;
                    _matches    = 0;
                }

                var sendIt = _matches < (format is ServerFormat3C
                                 ? ServerContext.Config.PacketOverflowLimit
                                 : ServerContext.Config.ServerOverflowTolerate);

                if (ServerContext.Config.LogSentPackets)
                {
                    if (this is GameClient)
                    {
                        Console.WriteLine("{0}: {1}", (this as GameClient)?.Aisling?.Username, packet);
                    }
                }

                if (format.Secured)
                {
                    Encryption.Transform(packet);
                }


                if (!sendIt)
                {
                    return;
                }

                var buffer = packet.ToArray();

                if (ServerContext.Config.SendClientPacketsAsAsync)
                {
                    Socket.BeginSend(buffer, 0, buffer.Length, 0, SendCallback, Socket);
                    return;
                }

                Socket.Send(buffer);
            }
        }