예제 #1
0
파일: Mode.cs 프로젝트: wuscier/Classroom3
        private async void ExitMeeting()
        {
            var currentWindow = Application.Current.Windows;
            var window        = currentWindow[0];

            if (!(window is IntoClassView))
            {
                return;
            }
            var exitDialog = new Dialog($"您当前正在课堂中,是否要退出当前课堂?", "是", "否");
            var result     = exitDialog.ShowDialog();

            if (!result.HasValue || !result.Value)
            {
                return;
            }
            //退出当前课堂
            var exitMessage = await _meetingSdkAgent.LeaveMeeting();

            await _windowManager.Leave();

            if (exitMessage.StatusCode != 0)
            {
                MessageQueueManager.Instance.AddError(MessageManager.ExitMeetingError);
                return;
            }
            var mainView = new MainView();

            mainView.Show();
        }
예제 #2
0
        public void _meetingManagerService_InvitationReceivedEvent(MeetingInvitationModel invitation)
        {
            Application.Current.Dispatcher.BeginInvoke(new Action(async() =>
            {
                string creatorName;
                var currentWindows = Application.Current.Windows;
                Window window      = currentWindows[0];
                if (_exitDialog != null)
                {
                    return;
                }
                var trueInvitor =
                    GlobalData.Instance.Classrooms.FirstOrDefault(o => o.SchoolRoomNum == invitation.SenderId.ToString());
                var inClass = false;
                //判断是否再课堂中,如果在课堂中,需要判断新邀请与当前课堂是否是同一个,如果是,则不需要处理,否则退出当前课堂,进入新课堂

                int curMeetingId;
                object curMeetingIdObj = AppCache.TryGet(CacheKey.MeetingId);
                if (curMeetingIdObj != null && int.TryParse(curMeetingIdObj.ToString(), out curMeetingId))
                {
                    if (curMeetingId == invitation.MeetingId)
                    {
                        return;
                    }
                    //在课堂中
                    _exitDialog = new Dialog($"您当前正在课堂中,是否要结束当前课堂,加入到新课堂?", "加入新课堂", "留在当前课堂");
                    inClass     = true;
                }
                else
                {
                    _exitDialog = new Dialog($"{trueInvitor?.SchoolRoomName},邀请您听课", "去听课", "稍后");
                }

                var result = _exitDialog.ShowDialog();
                if (!result.HasValue || !result.Value)
                {
                    return;
                }

                bool isSettingsValid = DeviceSettingsChecker.Instance.IsVideoAudioSettingsValid(window);

                if (!isSettingsValid)
                {
                    return;
                }

                //判断课堂是否存在
                var reuslt = await _meetingSdkAgent.IsMeetingExist(invitation.MeetingId);
                if (reuslt.StatusCode != 0)
                {
                    MessageQueueManager.Instance.AddError(MessageManager.MeetingNoExistError);
                    return;
                }
                if (inClass)
                {
                    //退出当前课堂
                    //var clearResult = await ClearMeeting();
                    //if (!clearResult)
                    //{
                    //    MessageQueueManager.Instance.AddError(MessageManager.ExitMeetingError);
                    //    return;
                    //}
                    var exitMessage = await _meetingSdkAgent.LeaveMeeting();
                    await _windowManager.Leave();
                    if (exitMessage.StatusCode != 0)
                    {
                        MessageQueueManager.Instance.AddError(MessageManager.ExitMeetingError);
                        return;
                    }
                }
                var meetingList = _localDataManager.GetMeetingList() ??
                                  new MeetingList()
                {
                    MeetingInfos = new List <MeetingItem>()
                };
                var localMeetingInfo = meetingList.MeetingInfos.FirstOrDefault(o => o.MeetingId == invitation.MeetingId);

                string createTime = string.Empty;

                if (localMeetingInfo != null && localMeetingInfo.CreatorId == GlobalData.Instance.Classroom.SchoolRoomNum)
                {
                    createTime = localMeetingInfo.CreateTime.ToString();
                    AppCache.AddOrUpdate(CacheKey.HostId, GlobalData.Instance.Classroom.SchoolRoomNum);
                    creatorName = GlobalData.Instance.Classroom.SchoolRoomName;
                }
                else
                {
                    MeetingResult <MeetingModel> meetingInfo = await _meetingSdkAgent.GetMeetingInfo(invitation.MeetingId);

                    if (meetingInfo.StatusCode != 0)
                    {
                        MessageQueueManager.Instance.AddError("获取会议信息时出错!");
                        return;
                    }

                    if (meetingInfo.Result.MeetingType == MeetingType.DatedMeeting && meetingInfo.Result.HostId == 0)
                    {
                    }

                    AppCache.AddOrUpdate(CacheKey.HostId, meetingInfo.Result.HostId);

                    createTime = meetingInfo.Result.StartTime;

                    creatorName = GlobalData.Instance.Classrooms.FirstOrDefault(cls => cls.SchoolRoomNum == meetingInfo.Result.HostId.ToString())?.SchoolRoomName;
                }

                AppCache.AddOrUpdate(CacheKey.MeetingId, invitation.MeetingId);

                GlobalData.Instance.Course = new Course();
                if (inClass)
                {
                    //var mainView = new MainView();
                    //mainView.Show();
                    var wd = SetWindowsTop.FindWindow(null, "IntoClassView");
                    await Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        //if (_viewLayoutService.IsDoubleScreenOn)
                        //{
                        //    _viewLayoutService.IsDoubleScreenOn = false;
                        //    _viewLayoutService.StopExtendedViewAsync();
                        //    _viewLayoutService.ExtenedViewFrameList?.Clear();
                        //    _viewLayoutService.ResetAsInitialStatus();
                        //    Thread.Sleep(20);
                        //    foreach (Window item in Application.Current.Windows)
                        //    {
                        //        if (item is ExtendedScreenView)
                        //        {
                        //            item.Close();
                        //        }
                        //    }
                        //    SetWindowsTop.SetWindowPos(wd, 0, int.MaxValue, int.MaxValue, 0, 0, 0);
                        //}
                        var intoClassView = new IntoClassView(IntoClassType.Join);
                        intoClassView.Show();
                        //foreach (Window item in Application.Current.Windows)
                        //{
                        //    if (item is MainView)
                        //    {
                        //        item.Close();
                        //    }
                        //}
                        Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                        {
                            SetWindowsTop.SendMessage(wd, WM_CLOSE, 0, 0);
                        }));
                    }));
                }
                else
                {
                    var intoClassView = new IntoClassView(IntoClassType.Join);
                    intoClassView.Show();
                    foreach (Window item in Application.Current.Windows)
                    {
                        if (!(item is IntoClassView || item is ExtendedScreenView))
                        {
                            item.Close();
                        }
                    }
                }
                UpdateMeeting(meetingList, creatorName, createTime);
            }));
            _exitDialog = null;
        }