public VoiceChatPacketRouter(IMultiplayerSessionManager sessionManager, VoipSender voipSender, ICodecFactory codecFactory, DiContainer container)
        {
            _container     = container;
            SessionManager = sessionManager;
            //ConnectionManager = connectionManager;
            //VoipReceiver = voipReceiver;
            CodecFactory = codecFactory;
            VoipSender   = voipSender;
#if DEBUG
            dummyReceiver = container.InstantiateComponentOnNewGameObject <VoipReceiver>();
            var settings = new Codecs.Opus.OpusSettings()
            {
                SampleRate = 48000, Channels = 1
            };
            dummyReceiver.Initialize(sessionManager.localPlayer, codecFactory.CreateDecoder(Codecs.Opus.OpusDefaults.CodecId, settings));
            voipSender.OnAudioGenerated += (s, e) => { dummyReceiver.HandleAudioDataReceived(s, e); };
#endif
            AddEvents();
            sessionManager.RegisterSerializer((MultiplayerSessionManager.MessageType) 128, _mainSerializer);
            _mainSerializer.RegisterSubSerializer((byte)VoipPacketType.VoiceData, _voipDataSerializer);
            _mainSerializer.RegisterSubSerializer((byte)VoipPacketType.InfoRequest, _voipMetadataSerializer);
            _mainSerializer.RegisterSubSerializer((byte)VoipPacketType.VoiceMetadata, _voipMetadataSerializer);
            _voipDataSerializer.RegisterCallback((byte)VoipPacketType.VoiceData, HandleVoipDataPacket, VoipDataPacket.Obtain);
            Plugin.Log?.Debug($"VoiceChatPacketRouter Constructed.");
            foreach (IConnectedPlayer?player in sessionManager.connectedPlayers)
            {
                if (!player.isMe)
                {
                    CreatePlayerVoipReceiver(player.userId, player);
                }
            }
            //if (sessionManager.isConnected)
            IsConnected = true;
        }
 public void Dispose()
 {
     Plugin.Log?.Debug($"VoiceChatPacketRouter Disposed.");
     RemoveEvents();
     SessionManager = null !;
     //ConnectionManager = null!;
     VoipSender = null !;
     PlayerReceivers.Clear();
 }