static void NetEventOnReceive(AppSession session, AnalyzedPacket packet)
        {
            packet.SessionUniqueId = session.UniqueId;
            Logger.LogInformation($"[NetEventOnReceive] session: {session.SessionID}, ReceiveDataSize:{packet.Body.Length}");

            var pktID      = packet.PacketId + 1;
            var packetLen  = packet.Body.Length + 5;
            var dataSource = new byte[packetLen];

            Buffer.BlockCopy(BitConverter.GetBytes(packetLen), 0, dataSource, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes(pktID), 0, dataSource, 2, 2);
            dataSource[4] = 0;
            Buffer.BlockCopy(packet.Body, 0, dataSource, 5, packet.Body.Length);
            session.Channel.SendAsync(packet.Body.AsSpan());
        }
示例#2
0
        public unsafe void Output(AnalyzedPacket analyzedPacket)
        {
            // for default filter set we use, every single filter is mutually exclusive.
            if (analyzedPacket.Message.Length < HeaderLength)
            {
                return;
            }

            NetworkMessageHeader header;

            fixed(byte *p = &analyzedPacket.Message[0])
            {
                header = *(NetworkMessageHeader *)p;
            }

            int opcode = header.OpCode;

            if (analyzedPacket.RouteMark.GetCatalog() == MessageAttribute.CatalogLobby)
            {
                opcode |= OPMASK_LOBBY;
            }

            if (analyzedPacket.RouteMark.GetDirection() == MessageAttribute.DirectionSend)
            {
                opcode = -opcode;
            }

            if (!_consumerTypes.TryGetValue(opcode, out var consumer))
            {
                return;
            }

            if (!_listeners.TryGetValue(opcode, out var listener) || listener == null)
            {
                return;
            }

            var rm = new RoutedMessage(header, HeaderLength, analyzedPacket.Message, consumer, listener);

            EnqueueOutput(rm);
        }