private void _nAudioTest_AudioRecordEnded()
        {
            var vt = _voiceTester;
            if (vt != null)
            {
                vt.RecordEnded();
                return;
            }

            if (_speakingRoom == null)
                return;

            var message = new VoipMessageVoice
            {
                RoomName = _speakingRoom.R.AudioRoomId,
                FromUserId = _userData.User.Id,
                Audio = new byte[0],
                IsTeamOnly = _speakingRoomTeamOnly,
                MessageNumber = _messageNumber++,
                StreamNumber = _streamNumber,
            };

            _audioChatClient.Send(message);
            _speakingRoom.OnVoiceStopped(_userData.User);
            _speakingRoom = null;

            if (DebugSaveSentPackets)
            {
                _audioRec.Write(SerialPacketStream.AppDataPath(_audioRec));
                _audioRec = null;
            }
        }
 private void Stop(PgUser user, AudioRoomEx roomEx)
 {
     _nAudioTest.AudioReceiveEnded(user.Id);
     roomEx.OnVoiceStopped(user);
     lock (_receivedTimes)
     {
         _receivedTimes.Remove(new Tuple<PgUser, AudioRoomEx>(user, roomEx));
     }
 }
        private void _nAudioTest_AudioRecorded(AudioHardwareSession source, byte[] encoded, double signalPower)
        {
            var vt = _voiceTester;
            if (vt != null)
            {
                vt.Recorded(encoded, signalPower);
                return;
            }

            var isFirst = _speakingRoom == null;
            if (isFirst)
            {
                _speakingRoom = GetSpeakingRoom();
                _messageNumber = 0;
                _streamNumber++;

                _micTrigger.Index = 0;
            }

            if (_speakingRoom == null)
                return;

            if (isFirst)
            {
                if (UserDataManager.UserData.Settings.MicTriggerSoundOffEnabled)
                    Play(_micTrigger);

                _speakingRoomTeamOnly = _speakingRoom.R.IsVoiceTeamOnly;

                if (DebugSaveSentPackets)
                    _audioRec = new SerialPacketStream
                    {
                        Id = _userData.User.Id,
                        Parts = new List<SerialPacket>(),
                        IsEncoded = true,
                        RoomName = _speakingRoom.R.AudioRoomId,
                        StreamNumber = _streamNumber,
                    };
            }

            var message = new VoipMessageVoice
            {
                RoomName = _speakingRoom.R.AudioRoomId,
                FromUserId = _userData.User.Id,
                Audio = encoded,
                IsTeamOnly = _speakingRoomTeamOnly,
                MessageNumber = _messageNumber++,
                StreamNumber = _streamNumber,
            };

            if (DebugSaveSentPackets)
                _audioRec.Parts.Add(new SerialPacket(_audioRec.Parts.Count, encoded));

            _audioChatClient.Send(message);
            if (isFirst)
                _speakingRoom.OnVoiceSent(_userData.User);
        }
 private void SendLeaveRoom(AudioRoomEx roomEx)
 {
     var message = new VoipMessageLeaveRoom
     {
         RoomName = roomEx.R.AudioRoomId,
         FromUserId = _userData.User.Id
     };
     _audioChatClient.Send(message);
     OnVoiceConnectionChanged(roomEx, false);
 }
 private void SendJoinRoom(AudioRoomEx roomEx)
 {
     var message = new VoipMessageJoinRoom
     {
         RoomName = roomEx.R.AudioRoomId,
         FromUserId = _userData.User.Id
     };
     _audioChatClient.Send(message);
     AddJoinRoomTimeout(roomEx);
 }
 private void OnVoiceConnectionChanged(AudioRoomEx roomEx, bool isConnected)
 {
     ((Action)(delegate
     {
         roomEx.R.OnVoiceConnectionChanged(isConnected);
     })).BeginInvokeUI();
 }
 private void AddJoinRoomTimeout(AudioRoomEx roomEx)
 {
     var jr = new JoinTimeout
     {
         RoomEx = roomEx,
         Timeout = DateTime.UtcNow + TimeSpan.FromSeconds(3),
     };
     lock (_joinTimeouts)
     {
         _joinTimeouts.Add(jr);
     }
 }
 public void JoinRoom(IVoiceRoom audioRoom)
 {
     AudioRoomEx roomEx;
     lock (_joinedRooms)
     {
         if (!_joinedRooms.TryGetValue(audioRoom.AudioRoomId, out roomEx))
         {
             roomEx = new AudioRoomEx(audioRoom);
             _joinedRooms[audioRoom.AudioRoomId] = roomEx;
         }
     }
     SendJoinRoom(roomEx);
 }