コード例 #1
0
ファイル: RoomService.cs プロジェクト: wangws556/duoduo-chat
        public void ToggleAudio(int roomId, MicType micType)
        {
            var micS = GetUserMicStatus(roomId, unc.User.Id, micType);
            if (micS != null && micS.MicStatus != MicStatusMessage.MicStatus_Off)
            {
                if ((micS.MicStatus & MicStatusMessage.MicStatus_Audio) > 0)
                {
                    micS.MicStatus = micS.MicStatus & (~MicStatusMessage.MicStatus_Audio);
                }
                else
                {
                    micS.MicStatus = micS.MicStatus | MicStatusMessage.MicStatus_Audio;
                }

                var msg = new MicStatusMessage
                {
                    MicAction = Model.Chat.MicAction.Toggle,
                    MicStatus = micS.MicStatus,
                    UserId = unc.User.Id
                };

                BroadCast(roomId, (u) => u.Callback.MicStatusMessageReceived(roomId, msg), unc.User.Id);
            }
        }
コード例 #2
0
ファイル: RoomService.cs プロジェクト: wangws556/duoduo-chat
 public void DownMic(int roomId, MicType micType, int index)
 {
     var mics = micCache[roomId][micType];
     if (index < 0)
     {
         var usr = mics.Values.FirstOrDefault(u => u.UserId == unc.User.Id);
         if (usr != null)
         {
             index = usr.MicIndex;
         }
     }
     if (index >= 0)
     {
         if (mics[index].UserId == unc.User.Id)
         {
             mics[index].Reset();
             var msg = new MicStatusMessage
             {
                 MicAction = Model.Chat.MicAction.DownMic,
                 MicIndex = index,
                 MicStatus = MicStatusMessage.MicStatus_Off,
                 MicType = micType,
                 UserId = unc.User.Id
             };
             BroadCast(roomId, (u) => u.Callback.MicStatusMessageReceived(roomId, msg), unc.User.Id);
         }
     }
 }
コード例 #3
0
 static void InitMicCache(int roomId, MicType micType, int count)
 {
     if (count > 0)
     {
         micCache[roomId][micType] = new SafeDictionary<int, MicStatusMessage>();
         for (int i = 0; i < count; i++)
         {
             micCache[roomId][micType][i] = new MicStatusMessage();
         }
     }      
 }
        private void MicStatusMessageReceivedEventHandler(int arg1, MicStatusMessage arg2)
        {
            if (arg1 == RoomVM.Id)
            {
                var uvm = UserVMs.FirstOrDefault(u => u.Id == arg2.UserId);
                if (uvm != null)
                {
                    switch (arg2.MicAction)
                    {
                        #region OnMic

                        case MicAction.OnMic:
                            {
                                switch (arg2.MicType)
                                {
                                    case MicType.Public:
                                        {
                                            switch (arg2.MicIndex)
                                            {
                                                case 0:
                                                    FirstMicUserVM = uvm;
                                                    break;
                                                case 1:
                                                    SecondMicUserVM = uvm;
                                                    break;
                                                case 2:
                                                    ThirdMicUserVM = uvm;
                                                    break;
                                            }
                                        }
                                        break;
                                    case MicType.Private:
                                        if (!PrivateMicUserVMs.Contains(uvm))
                                        {
                                            PrivateMicUserVMs.Add(uvm);
                                        }
                                        break;
                                    case MicType.Secret:
                                        if (!SecretMicUserVMs.Contains(uvm))
                                        {
                                            SecretMicUserVMs.Add(uvm);
                                        }
                                        break;
                                    default:
                                        break;
                                }
                                uvm.OnMic(arg2.MicType, arg2.MicIndex, arg2.StreamGuid, arg2.MicStatus);
                                updateMicImage(uvm.Id, true);
                            }
                            break;

                        #endregion

                        #region DownMic

                        case MicAction.DownMic:
                            {
                                switch (arg2.MicType)
                                {
                                    case MicType.Public:
                                        switch (arg2.MicIndex)
                                        {
                                            case 0:
                                                FirstMicUserVM = null;
                                                break;
                                            case 1:
                                                SecondMicUserVM = null;
                                                break;
                                            case 2:
                                                ThirdMicUserVM = null;
                                                break;
                                        }
                                        break;
                                    case MicType.Private:
                                        PrivateMicUserVMs.Remove(uvm);
                                        break;
                                    case MicType.Secret:
                                        SecretMicUserVMs.Remove(uvm);
                                        break;
                                }
                            }
                            uvm.DownMic();
                            updateMicImage(uvm.Id, false);
                            break;

                        #endregion

                        #region Toggle

                        case MicAction.Toggle:
                            {
                                uvm.Toggle(arg2.MicStatus);
                            }
                            break;

                        #endregion
                    }
                }
            }
        }
コード例 #5
0
 static int GetAvailableMicStatus(int roomId, MicType micType, int userId, int suggestedIndex, out MicStatusMessage msg)
 {
     msg = null;
     var mics = micCache[roomId][micType];
     int index = -1;
     if (suggestedIndex > -1)
     {
         if (suggestedIndex < mics.Count)
         {
             if (mics[suggestedIndex].UserId == userId)
             {
                 msg = mics[suggestedIndex];
                 index = suggestedIndex;
             }
         }
     }
     if (msg == null)
     {
         foreach (var pair in mics)
         {
             if (pair.Value.UserId == -1 || pair.Value.UserId == userId)
             {
                 msg = pair.Value;
                 index = pair.Key;
                 break;
             }
         }
     }
     if (msg == null && micType == MicType.Public)
     {
         msg = new MicStatusMessage
         {
             MicType = micType,
             MicStatus = MicStatusMessage.MicStatus_Queue,
         };
         //Mic Queue
         if (micType == MicType.Public)
         {
             msg = micQueue[roomId].FirstOrDefault(u => u.UserId == userId);
             if (msg == null)
             {
                 micQueue[roomId].Add(msg);
             }
         }
         index = micQueue[roomId].IndexOf(msg);
     }
     return index;
 }