Example #1
0
        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;
            }
        }