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()); }
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); }