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