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 RegisterCallback <T>(ExtendedSessionManager.MessageType serializerType, Action <T, ExtendedPlayer> callback, Func <T> constructor) where T : INetSerializable { Action <T, IConnectedPlayer> extendedCallback = delegate(T packet, IConnectedPlayer player) { ExtendedPlayer extendedPlayer = GetExtendedPlayer(player); callback(packet, extendedPlayer); }; _packetSerializer.RegisterCallback(serializerType, extendedCallback, constructor); }