public override void ChannelActive(IChannelHandlerContext context)
        {
            var random = new Random();
            var socket = _socketFactory.Build(
                context.Channel,
                (uint)random.Next(),
                (uint)random.Next()
                );

            using (var p = new OutPacket())
            {
                p.Encode <short>(AESCipher.Version);
                p.Encode <string>("1");
                p.Encode <int>((int)socket.SeqRecv);
                p.Encode <int>((int)socket.SeqSend);
                p.Encode <byte>(8);

                socket.SendPacket(p);
            }

            context.Channel.GetAttribute(Socket.SocketKey).Set(socket);
            _server.Sockets.Add(socket);

            Logger.Debug($"Accepted connection from {context.Channel.RemoteAddress}");
        }
示例#2
0
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            var socket = context.Channel.GetAttribute(AbstractSocket.SocketKey).Get();
            var p      = (Packet)message;

            if (socket != null)
            {
                socket.OnPacket(p);
            }
            else
            {
                var version = p.Decode <short>();

                p.Decode <string>();

                var seqSend = p.Decode <uint>();
                var seqRecv = p.Decode <uint>();

                p.Decode <byte>();

                if (version != 95)
                {
                    return;
                }

                var newSocket = _socketFactory.Build(
                    context.Channel,
                    seqSend,
                    seqRecv
                    );

                lock (_client)
                {
                    if (_client.Socket == null)
                    {
                        _client.Socket = newSocket;
                    }
                }

                context.Channel.GetAttribute(AbstractSocket.SocketKey).Set(newSocket);
                Logger.Debug($"Established connection to {context.Channel.RemoteAddress}");
            }
        }
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            var socket = (T)context.Channel.GetAttribute(Socket.SocketKey).Get();
            var p      = (InPacket)message;

            if (socket != null)
            {
                socket.OnPacket(p);
            }
            else
            {
                var version = p.Decode <short>();

                p.Decode <string>();

                var seqSend = p.Decode <uint>();
                var seqRecv = p.Decode <uint>();

                p.Decode <byte>();

                if (version != AESCipher.Version)
                {
                    return;
                }

                var newSocket = _socketFactory.Build(
                    context.Channel,
                    seqSend,
                    seqRecv
                    );

                lock (_client)
                {
                    if (_client.Socket == null)
                    {
                        _client.Socket = newSocket;
                    }
                }

                context.Channel.GetAttribute(Socket.SocketKey).Set(newSocket);
            }
        }