示例#1
0
        /// <summary>
        /// Handles data from network connected to specific client id
        /// </summary>
        /// <param name="id">unique id of a remote client</param>
        /// <param name="bytes">array of received data (samples)</param>
        private void HandleRawData(int id, string name, byte[] bytes)
        {
            if (!_listening)
            {
                return;
            }

            lock (_lock)
            {
                Speaker speaker;

                if (!Speakers.ContainsKey(id))
                {
                    speaker        = new Speaker(id, name, transform);
                    speaker.IsMute = IsSpeakersMuted;

                    Speakers.Add(id, speaker);

                    SpeakersUpdatedEvent?.Invoke();
                }
                else
                {
                    speaker = Speakers[id];
                }

                speaker.HandleRawData(bytes);
            }
        }
示例#2
0
        /// <summary>
        /// Disposes speaker by client id
        /// </summary>
        /// <param name="id"></param>
        public void SpeakerLeave(int id)
        {
            if (!_listening)
            {
                return;
            }

            lock (_lock)
            {
                if (Speakers.ContainsKey(id))
                {
                    Speakers[id].Dispose();
                    Speakers.Remove(id);

                    SpeakerLeavedByInactiveEvent?.Invoke(id);
                }
            }

            SpeakersUpdatedEvent?.Invoke();
        }
示例#3
0
        /// <summary>
        /// cleans inactive speakers
        /// </summary>
        private void CleanInactiveSpeakers()
        {
            lock (_lock)
            {
                List <int> inactive = new List <int>();

                foreach (var speaker in Speakers)
                {
                    if (!speaker.Value.IsActive)
                    {
                        inactive.Add(speaker.Key);
                    }
                }

                foreach (int id in inactive)
                {
                    Speakers[id].Dispose();
                    Speakers.Remove(id);
                }
                inactive.Clear();
            }

            SpeakersUpdatedEvent?.Invoke();
        }