private void PacketEvent(ConnectionContext ctx, ref Packet <S2C> packet) { switch (packet.PacketType) { case PacketType.Command: case PacketType.CommandLow: var data = packet.Data; if (Log.IsDebugEnabled) { Log.Debug("[I] {0}", Tools.Utf8Encoder.GetString(packet.Data)); } _ = scheduler.Invoke(() => { if (ctx != context) { Log.Debug("Stray packet from old packethandler"); } var result = msgProc.PushMessage(data); if (result != null) { InvokeEvent(result.Value); } }); break; case PacketType.Voice: case PacketType.VoiceWhisper: OutStream?.Write(packet.Data, new Meta { In = new MetaIn { Whisper = packet.PacketType == PacketType.VoiceWhisper } }); break; case PacketType.Init1: // Init error if (packet.Data.Length == 5 && packet.Data[0] == 1) { var errorNum = BinaryPrimitives.ReadUInt32LittleEndian(packet.Data.AsSpan(1)); if (Enum.IsDefined(typeof(TsErrorCode), errorNum)) { Log.Info("Got init error: {0}", (TsErrorCode)errorNum); } else { Log.Warn("Got undefined init error: {0}", errorNum); } _ = scheduler.Invoke(() => ChangeState(ctx, TsClientStatus.Disconnected)); } break; } }