Ejemplo n.º 1
0
        void UserPublishMicAudio(UserPublishModel model)
        {
            Participant participant;

            if (_participants.TryGetValue(model.AccountId, out participant))
            {
                StreamResource <IStreamParameter> userPublishStreamResource = new StreamResource <IStreamParameter>();
                SubscribeMicStreamParameter       parameter = StreamParameterProviders.GetParameter <SubscribeMicStreamParameter>(string.Empty);

                userPublishStreamResource.MediaType       = MediaType.Microphone;
                userPublishStreamResource.ResourceId      = model.ResourceId;
                userPublishStreamResource.SyncId          = model.SyncId;
                userPublishStreamResource.StreamParameter = parameter;

                participant.Resources.Add(userPublishStreamResource);

                if (_autoSubscribe)
                {
                    MeetingResult result = Subscribe(model.AccountId, model.ResourceId, MediaType.Microphone);
                    if (result.StatusCode == 0)
                    {
                        userPublishStreamResource.IsUsed = true;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void GetJoinMeetingInfo(int meetingId)
        {
            MeetingResult <JoinMeetingModel> joinMeetingResult = _meetingSdkWrapper.GetJoinMeetingInfo(meetingId);

            if (joinMeetingResult.StatusCode == 0)
            {
                foreach (var speakerInfo in joinMeetingResult.Result.MeetingSpeakerModels)
                {
                    Participant participant;
                    if (_participants.TryGetValue(speakerInfo.Account.AccountId, out participant))
                    {
                        foreach (var streamInfo in speakerInfo.MeetingUserStreamInfos)
                        {
                            StreamResource <IStreamParameter> stream = new StreamResource <IStreamParameter>()
                            {
                                MediaType  = (MediaType)streamInfo.MediaType,
                                ResourceId = streamInfo.ResourceId,
                                SyncId     = streamInfo.SyncGroupId,
                            };
                            participant.Resources.Add(stream);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public MeetingResult Unsubscribe(int accountId, int resourceId, MediaType mediaType)
        {
            UserUnpublishModel userUnpublishModel = new UserUnpublishModel()
            {
                AccountId  = accountId,
                ResourceId = resourceId,
            };

            MeetingResult result = _meetingSdkWrapper.Unsubscribe(userUnpublishModel);

            if (result.StatusCode == 0)
            {
                Participant participant;
                if (_participants.TryGetValue(accountId, out participant))
                {
                    var resource = participant.Resources.SingleOrDefault(m => m.ResourceId == resourceId);
                    if (resource != null)
                    {
                        resource.IsUsed = false;
                    }
                }

                VideoBoxType videoBoxType;
                if (mediaType.TryConvertVideoBoxType(out videoBoxType))
                {
                    VideoBoxManager.Release(
                        accountId, videoBoxType == VideoBoxType.Camera
                            ? VideoBoxType.None
                            : videoBoxType);
                }
            }
            LayoutChanged(mediaType);
            return(result);
        }
        public MeetingResult GetMeetingById(int meetingId)
        {
            IMeetingMaster result = _meetingRetriever.GetMeetingByMeetingId(meetingId);

            MeetingResult meeting = new MeetingResult();

            meeting.AgendaURL             = result.AgendaURL;
            meeting.IsAVRequired          = result.IsAVRequired;
            meeting.IsPhoneRequired       = result.IsPhoneRequired;
            meeting.IsVideoConfRequired   = result.IsVideoConfRequired;
            meeting.PreferredLocation     = _locationRetriever.GetLocationByLocationId(result.PreferredLocationId).LocationName;
            meeting.ActualLocation        = _locationRetriever.GetLocationByLocationId(result.ActualLocationId).LocationName;
            meeting.MeetingDesc           = result.MeetingDesc;
            meeting.MeetingEndTime        = result.MeetingEndTime;
            meeting.MeetingPriority       = result.MeetingPriority;//todo
            meeting.MeetingStartTime      = result.MeetingStartTime;
            meeting.MinutesURL            = result.MinutesURL;
            meeting.PhoneBridge           = result.PhoneBridge;
            meeting.PhoneBridgeAccessCode = result.PhoneBridgeAccessCode;
            meeting.ScheduledBy           = _userRetriever.GetUserFullNameByUserId(result.MeetingCalledBy);
            meeting.Title           = result.MeetingDesc;
            meeting.MeetingDuration = result.MeetingDuration;

            return(meeting);
        }
        public List <MeetingResult> GetAllMeetings()
        {
            List <IMeetingMaster> results  = _meetingRetriever.GetAllMeetings();
            List <MeetingResult>  meetings = new List <MeetingResult>();

            foreach (IMeetingMaster result in results)
            {
                MeetingResult meeting = new MeetingResult();

                meeting.AgendaURL             = result.AgendaURL;
                meeting.IsAVRequired          = result.IsAVRequired;
                meeting.IsPhoneRequired       = result.IsPhoneRequired;
                meeting.IsVideoConfRequired   = result.IsVideoConfRequired;
                meeting.PreferredLocation     = _locationRetriever.GetLocationByLocationId(result.PreferredLocationId).LocationName;
                meeting.ActualLocation        = _locationRetriever.GetLocationByLocationId(result.ActualLocationId).LocationName;
                meeting.MeetingDesc           = result.MeetingDesc;
                meeting.MeetingEndTime        = result.MeetingEndTime;
                meeting.MeetingPriority       = result.MeetingPriority;//todo
                meeting.MeetingStartTime      = result.MeetingStartTime;
                meeting.MinutesURL            = result.MinutesURL;
                meeting.PhoneBridge           = result.PhoneBridge;
                meeting.PhoneBridgeAccessCode = result.PhoneBridgeAccessCode;
                meeting.ScheduledBy           = _userRetriever.GetUserFullNameByUserId(result.MeetingCalledBy);
                meeting.Title = result.MeetingDesc;

                meetings.Add(meeting);
            }

            return(meetings);
        }
Ejemplo n.º 6
0
        private void AccountResourceRemovedEventHandler(VideoBox videoBox)
        {
            lock (_syncRoot)
            {
                if (ExtendedView == null)
                {
                    return;
                }

                ExtendedView.Dispatcher.BeginInvoke(new System.Action(() =>
                {
                    if (ExtendedView == null)
                    {
                        return;
                    }

                    var tobeRemovedItem = _items[videoBox.Name];

                    if (tobeRemovedItem != null && tobeRemovedItem.AccountResource != null)
                    {
                        MeetingResult meetingResult = _meetingSdkAgent.RemoveDisplayWindow(tobeRemovedItem.AccountResource.AccountModel.AccountId, tobeRemovedItem.AccountResource.ResourceId, tobeRemovedItem.Handle, 0, 0);
                        System.Console.WriteLine($"RemoveDisplayWindow:statusCode={meetingResult.StatusCode}, msg={meetingResult.Message}, accountId={tobeRemovedItem.AccountResource.AccountModel.AccountId}");
                        tobeRemovedItem.AccountResource = null;
                        _items[videoBox.Name]           = tobeRemovedItem;
                    }

                    LayoutChange(LayoutRendererStore.CurrentLayoutRenderType);

                    _eventAggregator.GetEvent <ExtendedViewsShowedEvent>().Publish();
                }));
            }
            // 同步画面资源信息。
        }
 protected void lstVwMeeting_ItemDataBound(object sender, ListViewItemEventArgs e)
 {
     if (e.Item.ItemType == ListViewItemType.DataItem)
     {
         MeetingResult    currentMeeting        = ((ListViewDataItem)e.Item).DataItem as MeetingResult;
         ucMeetingDisplay currentMeetingDisplay = e.Item.FindControl("UCMeeting") as ucMeetingDisplay;
         currentMeetingDisplay.Initialize(currentMeeting);
     }
 }
        private void UserStartSpeakEventHandler(MeetingResult <UserSpeakModel> obj)
        {
            var attendeeItem = AttendeeItems.FirstOrDefault(attendee => attendee.Id == obj.Result.Account.AccountId.ToString());

            if (attendeeItem != null)
            {
                attendeeItem.Content = CancelSpeaking;
            }
        }
 public void Initialize(MeetingResult meeting)
 {
     if (meeting != null)
     {
         lblMeetingLocation.Text = meeting.ActualLocation;
         lblMeetingTitle.Text    = meeting.Title;
         lblProjectedDate.Text   = meeting.Date;
         lblScheduledBy.Text     = meeting.ScheduledBy;
     }
 }
Ejemplo n.º 10
0
        public MeetingResult StartMp4Record(VideoStreamModel[] videoStreamModels, AudioStreamModel[] audioStreamModels)
        {
            if (string.IsNullOrEmpty(RecordDirectory) || !Directory.Exists(RecordDirectory))
            {
                return(new MeetingResult()
                {
                    Message = MessageManager.RecordDirectoryNotSet,
                    StatusCode = -1,
                });
            }

            MeetingResult <int> publishLiveResult = _meetingService.PublishLiveStream(RecordParam);

            if (publishLiveResult.StatusCode != 0)
            {
                return(publishLiveResult);
            }

            RecordId = publishLiveResult.Result;

            MeetingResult updateVideoResult = _meetingService.UpdateLiveStreamVideoInfo(publishLiveResult.Result, videoStreamModels);
            MeetingResult updateAudioResult = _meetingService.UpdateLiveStreamAudioInfo(publishLiveResult.Result, audioStreamModels);


            string filename = Path.Combine(RecordDirectory, DateTime.Now.ToString("yyyy-MM-dd_HH_mm_ss") + ".mp4");

            MeetingResult startRecordResult = _meetingService.StartMp4Record(publishLiveResult.Result, filename);


            MeetingResult mergedResult = new MeetingResult()
            {
                Message    = "录制成功!",
                StatusCode = 0
            };

            if (updateVideoResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message    = updateVideoResult.Message;
            }

            if (updateAudioResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message   += $" {updateAudioResult.Message}";
            }

            if (startRecordResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message   += $" {startRecordResult.Message}";
            }

            return(mergedResult);
        }
Ejemplo n.º 11
0
        public static MeetingResult <T> Error <T>(string message)
        {
            var result = new MeetingResult <T>
            {
                Result     = default(T),
                StatusCode = -9999,
                Message    = message
            };

            return(result);
        }
 protected void lstVwMeeting_ItemDataBound(object sender, ListViewItemEventArgs e)
 {
     if (e.Item.ItemType == ListViewItemType.DataItem)
     {
         MeetingResult      currentMeeting        = ((ListViewDataItem)e.Item).DataItem as MeetingResult;
         ucMyMeetingDisplay currentMeetingDisplay = e.Item.FindControl("UCMeeting") as ucMyMeetingDisplay;
         (e.Item.FindControl("hdnFieldMeetingId") as HiddenField).Value       = currentMeeting.MeetingId.ToString();
         (e.Item.FindControl("hdnFieldMeetingCalledBy") as HiddenField).Value = currentMeeting.MeetingCalledBy.ToString();
         currentMeetingDisplay.Initialize(currentMeeting);
     }
 }
Ejemplo n.º 13
0
        public string IsVideoAudioSettingsValid()
        {
            MeetingResult <IList <VideoDeviceModel> > videoDeviceResult = _meetingSdkAgent.GetVideoDevices();

            MeetingResult <IList <string> > micResult = _meetingSdkAgent.GetMicrophones();

            MeetingResult <IList <string> > speakerResult = _meetingSdkAgent.GetLoudSpeakers();

            IDeviceNameAccessor deviceNameAccessor = IoC.Get <IDeviceNameAccessor>();

            IEnumerable <string> cameraDeviceName;

            if (videoDeviceResult.Result.Count == 0 || string.IsNullOrEmpty(_configManager.MainVideoInfo?.VideoDevice) || !deviceNameAccessor.TryGetName(DeviceName.Camera, new Func <DeviceName, bool>(d => { return(d.Option == "first"); }), out cameraDeviceName) || !videoDeviceResult.Result.Any(vdm => vdm.DeviceName == cameraDeviceName.FirstOrDefault()))
            {
                return(Messages.WarningNoCamera);
            }

            if (_configManager.MainVideoInfo?.DisplayWidth == 0 || _configManager.MainVideoInfo?.DisplayHeight == 0 || _configManager.MainVideoInfo?.VideoBitRate == 0)
            {
                return(Messages.WarningWrongVideoParams);
            }

            IEnumerable <string> micDeviceName;

            if (micResult.Result.Count == 0 || string.IsNullOrEmpty(_configManager.AudioInfo?.AudioSammpleDevice) || !deviceNameAccessor.TryGetName(DeviceName.Microphone, new Func <DeviceName, bool>(d => { return(d.Option == "first"); }), out micDeviceName) || !micResult.Result.Any(mic => mic == micDeviceName.FirstOrDefault()))
            {
                return(Messages.WarningNoMicrophone);
            }

            if (_configManager.AudioInfo?.SampleRate == 0 || _configManager.AudioInfo?.AAC == 0)
            {
                return(Messages.WarningWrongMicParams);
            }

            string audioOutputDeviceName;

            if (speakerResult.Result.Count == 0 || string.IsNullOrEmpty(_configManager.AudioInfo?.AudioOutPutDevice) || !deviceNameAccessor.TryGetSingleName(DeviceName.Speaker, out audioOutputDeviceName) || !speakerResult.Result.Any(speaker => speaker == audioOutputDeviceName))
            {
                return(Messages.WarningNoSpeaker);
            }

            if (string.IsNullOrEmpty(_configManager.RecordInfo.RecordDirectory))
            {
                return(Messages.WarningRecordDirectoryNotSet);
            }

            if (!Directory.Exists(_configManager.RecordInfo.RecordDirectory))
            {
                return(Messages.WarningRecordDirectoryNotExist);
            }

            return("");
        }
Ejemplo n.º 14
0
        void UserUnpublishMicAudio(UserUnpublishModel model)
        {
            Participant participant;

            if (_participants.TryGetValue(model.AccountId, out participant))
            {
                participant.Resources.RemoveWhere(res => res.ResourceId == model.ResourceId);
                MeetingResult result = Unsubscribe(model.AccountId, model.ResourceId, MediaType.Microphone);
                if (result.StatusCode == 0)
                {
                }
            }
        }
        protected void DailyCalendar_EventClick(object sender, EventClickEventArgs e)
        {
            int scheduleEntryId = Convert.ToInt32(e.Value);

            MeetingResult meetingResult = _controller.GetEventInformationById(scheduleEntryId);

            if (meetingResult.MeetingId == 0)
            {
                txtBoxMeetingTitle.Text             = meetingResult.Title;
                txtBoxMeetingTitle.Enabled          = true;
                txtBoxFromTime.Text                 = meetingResult.MeetingStartTime.ToString();
                txtBoxFromTime.Enabled              = true;
                txtBoxToTime.Text                   = meetingResult.MeetingEndTime.ToString();
                txtBoxToTime.Enabled                = true;
                lblMeetingCalledBy.Visible          = false;
                txtBoxMeetingCalledBy.Visible       = false;
                lblMEetingPriority.Visible          = false;
                txtBoxMeetingPriority.Visible       = false;
                lblAgendaUrl.Visible                = false;
                txtBoxAgendaUrl.Visible             = false;
                lblPhoneBridge.Visible              = false;
                txtBoxPhoneBridge.Visible           = false;
                lblPhoneBridgeAccessCode.Visible    = false;
                txtBoxPhoneBridgeAccessCode.Visible = false;
                lblLocation.Visible                 = false;
                txtBoxLocation.Visible              = false;
                lblMinutesUrl.Visible               = false;
                txtBoxMinutesUrl.Visible            = false;


                btnDelete.Visible = true;

                hiddenMeetingId.Value = meetingResult.UserScheduleIndexId.ToString();
            }
            else
            {
                txtBoxMeetingTitle.Text          = meetingResult.Title;
                txtBoxFromTime.Text              = meetingResult.MeetingStartTime.ToString();
                txtBoxToTime.Text                = meetingResult.MeetingEndTime.ToString();
                txtBoxMeetingCalledBy.Text       = meetingResult.ScheduledBy;
                txtBoxMeetingPriority.Text       = meetingResult.MeetingPriority.ToString();
                txtBoxAgendaUrl.Text             = meetingResult.AgendaURL;
                txtBoxPhoneBridge.Text           = meetingResult.PhoneBridge;
                txtBoxPhoneBridgeAccessCode.Text = meetingResult.PhoneBridgeAccessCode;
                txtBoxLocation.Text              = meetingResult.ActualLocation;
                txtBoxMinutesUrl.Text            = meetingResult.MinutesURL;
            }

            pop.Show();
        }
Ejemplo n.º 16
0
        void UserUnpublishDataVideo(UserUnpublishModel model)
        {
            Participant participant;

            if (_participants.TryGetValue(model.AccountId, out participant))
            {
                participant.Resources.RemoveWhere(res => res.ResourceId == model.ResourceId);
                MeetingResult result = Unsubscribe(model.AccountId, model.ResourceId, MediaType.VideoDoc);
                if (result.StatusCode == 0)
                {
                    VideoBoxManager.Release(model.AccountId, VideoBoxType.DataCard);
                }
            }
        }
Ejemplo n.º 17
0
        private async Task StartSdkAsync()
        {
            if (!_meetingSdkAgent.IsStarted)
            {
                var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

                IVisualizeShell visualizeShellService = IoC.Get <IVisualizeShell>();

                visualizeShellService.StartingSdk();


                MeetingResult result = await _meetingSdkAgent.Start("PCJM", path);


                if (result.StatusCode != 0)
                {
                    visualizeShellService.FinishStartingSdk(false, $"启动失败!{result.Message}");
                }
                else
                {
                    Common.UserInfo userInfo = IoC.Get <Common.UserInfo>();

                    MeetingResult <LoginModel> meetingResult = await _meetingSdkAgent.LoginThirdParty(userInfo.GetNube(), userInfo.AppKey, userInfo.OpenId);

                    if (meetingResult.StatusCode != 0)
                    {
                        visualizeShellService.FinishStartingSdk(false, "登录失败!");
                    }
                    else
                    {
                        _eventAggregator.GetEvent <UserLoginEvent>().Publish(new MeetingSdk.Wpf.UserInfo()
                        {
                            UserId   = meetingResult.Result.Account.AccountId,
                            UserName = userInfo.UserName,
                        });

                        visualizeShellService.FinishStartingSdk(true, Messages.InfoMeetingSdkStarted);
                    }
                }

                //Thread.Sleep(1000);
            }
        }
Ejemplo n.º 18
0
        private async Task <bool> StartSdkAsync()
        {
            var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            //path = Path.Combine(path, "sdk");

            MeetingResult result = await _meetingSdkAgent.Start("PCJM", path);

            if (result.StatusCode != 0)
            {
                MessageQueueManager.Instance.AddError("启动失败!");
                Dialog errorDialog = new Dialog($"启动失败!{result.Message}");
                errorDialog.ShowDialog();
            }
            else
            {
                MessageQueueManager.Instance.AddInfo("启动成功!");
            }

            return(result.StatusCode == 0);
        }
Ejemplo n.º 19
0
        public void Initialize(MeetingResult meeting)
        {
            if (meeting != null)
            {
                lblMeetingTitle.Text      = meeting.Title;
                lblAccessCode.Text        = meeting.PhoneBridgeAccessCode;
                lblActualLocation.Text    = meeting.ActualLocation;
                lblAgendaUrl.Text         = meeting.AgendaURL;
                lblEndTime.Text           = meeting.MeetingEndTime.ToString();
                lblStartTime.Text         = meeting.MeetingStartTime.ToString();
                lblPreferredLocation.Text = meeting.PreferredLocation;
                lblMinutesUrl.Text        = meeting.MinutesURL;
                lblPhoneBridge.Text       = meeting.PhoneBridge;
                lblPriority.Text          = meeting.MeetingPriority.ToString();

                lblScheduledBy.Text = meeting.ScheduledBy;

                listItemAVRequired.Selected    = meeting.IsAVRequired;
                listItemPhoneRequired.Selected = meeting.IsPhoneRequired;
                listItemVideoRequired.Selected = meeting.IsVideoConfRequired;
            }
        }
Ejemplo n.º 20
0
        public void GetMeetingsForUser(int userId)
        {
            IUser  user                          = _userRetriever.GetUserById(userId);
            string userFullName                  = _userRetriever.GetUserFullNameByUserId(userId);
            List <MeetingResult>  meetings       = new List <MeetingResult>();
            List <IMeetingMaster> meetingMasters = _meetingRetriever.GetAllMeetingsByUser(user);

            foreach (IMeetingMaster meeting in meetingMasters)
            {
                MeetingResult meetingResult = new MeetingResult();

                meetingResult.MeetingId        = meeting.MeetingId;
                meetingResult.ActualLocationId = meeting.ActualLocationId;
                meetingResult.Date             = meeting.MeetingStartTime.ToString();
                meetingResult.ActualLocation   = _locationRetriever.GetLocationByLocationId(meeting.ActualLocationId).LocationName;
                meetingResult.ScheduledBy      = _userRetriever.GetUserFullNameByUserId(meeting.MeetingCalledBy);
                meetingResult.Title            = meeting.MeetingDesc;

                meetings.Add(meetingResult);
            }
            _view.PopulateMeetings(meetings, userFullName);
        }
        public MeetingResult RefreshLiveStream(VideoStreamModel[] videoStreamModels, AudioStreamModel[] audioStreamModels)
        {
            if (LiveId == 0)
            {
                return(new MeetingResult()
                {
                    Message = "没有可更新的流!",
                    StatusCode = -1,
                });
            }

            Monitor.Enter(_syncRoot);

            MeetingResult updateVideoResult = _meetingService.UpdateLiveStreamVideoInfo(LiveId, videoStreamModels.ToArray());
            MeetingResult updateAudioResult = _meetingService.UpdateLiveStreamAudioInfo(LiveId, audioStreamModels.ToArray());

            MeetingResult mergedResult = new MeetingResult()
            {
                Message    = "更新推流成功!",
                StatusCode = 0
            };

            if (updateAudioResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message    = updateAudioResult.Message;
            }

            if (updateVideoResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message   += $" {updateVideoResult.Message}";
            }

            Monitor.Exit(_syncRoot);

            return(mergedResult);
        }
Ejemplo n.º 22
0
        private void GetParticipants()
        {
            MeetingResult <IList <ParticipantModel> > result = _meetingSdkWrapper.GetParticipants();

            if (result.StatusCode == 0)
            {
                var models = result.Result;
                foreach (var model in models)
                {
                    if (model.AccountId != Participant.Account.AccountId)
                    {
                        var account     = new AccountModel(model.AccountId, model.AccountName);
                        var participant = new Participant(account)
                        {
                            IsSpeaking = model.IsSpeaking,
                        };

                        _participants.TryAdd(model.AccountId, participant);
                    }
                }
                _eventAggregator.GetEvent <ParticipantCollectionChangeEvent>().Publish(_participants.Values);
            }
        }
Ejemplo n.º 23
0
        public MeetingResult StopMp4Record()
        {
            if (RecordId == 0)
            {
                return(new MeetingResult()
                {
                    Message = MessageManager.NoLiveToStop,
                    StatusCode = -1,
                });
            }

            MeetingResult stopRecordResult    = _meetingService.StopMp4Record(RecordId);
            MeetingResult unpublishLiveResult = _meetingService.UnpublishLiveStream(RecordId);

            RecordId = 0;


            MeetingResult mergedResult = new MeetingResult()
            {
                Message    = "停止录制成功!",
                StatusCode = 0
            };

            if (stopRecordResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message    = stopRecordResult.Message;
            }

            if (unpublishLiveResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message   += $" {unpublishLiveResult.Message}";
            }

            return(mergedResult);
        }
        public MeetingResult GetEventInformationById(int scheduleEntryId)
        {
            MeetingResult meetingResult = new MeetingResult();
            IUserSchedule userSchedule  = _meetingRetriever.GetUserBusyTime(scheduleEntryId);

            if (userSchedule.MeetingId == 0)
            {
                meetingResult.UserScheduleIndexId = userSchedule.IndexId;
                meetingResult.Title            = userSchedule.ScheduleEntryDescription;
                meetingResult.MeetingStartTime = userSchedule.FromTime;
                meetingResult.MeetingEndTime   = userSchedule.ToTime;
                meetingResult.MeetingId        = userSchedule.MeetingId;
            }
            else
            {
                IMeetingMaster result = _meetingRetriever.GetMeetingByMeetingId(userSchedule.MeetingId);

                meetingResult.AgendaURL             = result.AgendaURL;
                meetingResult.IsAVRequired          = result.IsAVRequired;
                meetingResult.IsPhoneRequired       = result.IsPhoneRequired;
                meetingResult.IsVideoConfRequired   = result.IsVideoConfRequired;
                meetingResult.PreferredLocation     = _locationRetriever.GetLocationByLocationId(result.PreferredLocationId).LocationName;
                meetingResult.ActualLocation        = _locationRetriever.GetLocationByLocationId(result.ActualLocationId).LocationName;
                meetingResult.MeetingDesc           = result.MeetingDesc;
                meetingResult.MeetingEndTime        = result.MeetingEndTime;
                meetingResult.MeetingPriority       = result.MeetingPriority;//todo
                meetingResult.MeetingStartTime      = result.MeetingStartTime;
                meetingResult.MinutesURL            = result.MinutesURL;
                meetingResult.PhoneBridge           = result.PhoneBridge;
                meetingResult.PhoneBridgeAccessCode = result.PhoneBridgeAccessCode;
                meetingResult.ScheduledBy           = _userRetriever.GetUserFullNameByUserId(result.MeetingCalledBy);
                meetingResult.Title     = result.MeetingDesc;
                meetingResult.MeetingId = userSchedule.MeetingId;
            }

            return(meetingResult);
        }
        public MeetingResult StopPushLiveStream()
        {
            if (LiveId == 0)
            {
                return(new MeetingResult()
                {
                    Message = "没有可停止的流!",
                    StatusCode = -1,
                });
            }

            MeetingResult stopRecordResult    = _meetingService.StopLiveRecord(LiveId);
            MeetingResult unpublishLiveResult = _meetingService.UnpublishLiveStream(LiveId);

            LiveId = 0;

            MeetingResult mergedResult = new MeetingResult()
            {
                Message    = "停止推流成功!",
                StatusCode = 0
            };

            if (stopRecordResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message    = stopRecordResult.Message;
            }

            if (unpublishLiveResult.StatusCode != 0)
            {
                mergedResult.StatusCode = -1;
                mergedResult.Message   += $" {unpublishLiveResult.Message}";
            }

            return(mergedResult);
        }
Ejemplo n.º 26
0
        public void ShowExtendedView(Window extendedView)
        {
            _disposeWindowDelegate = windowManager.RemoveLayoutWindow;
            windowManager.AddLayoutWindow(this);

            lock (_syncRoot)
            {
                ExtendedView = extendedView;
                Size         = new System.Windows.Size()
                {
                    Width  = extendedView.Width,
                    Height = extendedView.Height,
                };

                Properties.Clear();
                _items.Clear();

                foreach (var item in windowManager.VideoBoxManager.Items)
                {
                    VideoBox copiedVideoBox = item.Copy();

                    SetDataBindings(copiedVideoBox);

                    _items.Add(copiedVideoBox.Name, copiedVideoBox);

                    if (copiedVideoBox.AccountResource != null && copiedVideoBox.Visible)
                    {
                        MeetingResult meetingResult = _meetingSdkAgent.AddDisplayWindow(copiedVideoBox.AccountResource.AccountModel.AccountId, copiedVideoBox.AccountResource.ResourceId, copiedVideoBox.Handle, 0, 0);
                        System.Console.WriteLine($"ShowExtendedView/AddDisplayWindow:statusCode={meetingResult.StatusCode}, msg={meetingResult.Message}, accountId={copiedVideoBox.AccountResource.AccountModel.AccountId}");
                    }
                }
            }

            LayoutChange(LayoutRendererStore.CurrentLayoutRenderType);
            _eventAggregator.GetEvent <ExtendedViewsShowedEvent>().Publish();
        }
Ejemplo n.º 27
0
 public Task DeleteAsync(MeetingResult meetingResult)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 28
0
        private async void ShareAsync()
        {
            if (_isProcessingShareOperation)
            {
                ShareToggleItem.IsChecked = !ShareToggleItem.IsChecked;
                return;
            }

            if (!_isProcessingShareOperation)
            {
                _isProcessingShareOperation = true;
            }

            try
            {
                MeetingResult <IList <VideoDeviceModel> > videoDeviceResult = _meetingService.GetVideoDevices();

                MeetingResult <IList <string> > micResult = _meetingService.GetMicrophones();

                ConfigManager configManager = _localDataManager.GetSettingConfigData();

                IEnumerable <string> docCameras;
                if (!_deviceNameAccessor.TryGetName(DeviceName.Camera, (devName) => { return(devName.Option == "second"); }, out docCameras) || !videoDeviceResult.Result.Any(vdm => vdm.DeviceName == docCameras.FirstOrDefault()))
                {
                    ShareToggleItem.IsChecked = false;
                    MessageQueueManager.Instance.AddError("课件摄像头未配置!");
                    return;
                }


                if (configManager.DocVideoInfo?.DisplayWidth == 0 || configManager.DocVideoInfo?.DisplayHeight == 0 || configManager.DocVideoInfo?.VideoBitRate == 0)
                {
                    ShareToggleItem.IsChecked = false;
                    MessageQueueManager.Instance.AddError("课件采集参数未设置!");
                    return;
                }


                IEnumerable <string> docMics;
                if (!_deviceNameAccessor.TryGetName(DeviceName.Microphone, (devName) => { return(devName.Option == "second"); }, out docMics) || !micResult.Result.Any(mic => mic == docMics.FirstOrDefault()))
                {
                    ShareToggleItem.IsChecked = false;
                    MessageQueueManager.Instance.AddError("课件麦克风未配置!");
                    return;
                }

                if (!_windowManager.Participant.IsSpeaking)
                {
                    ShareToggleItem.IsChecked = false;
                    MessageQueueManager.Instance.AddError("发言状态才可以进行课件分享!");
                    return;
                }

                if (ShareToggleItem.IsChecked)
                {
                    MeetingResult <int> publishDocCameraResult = await _windowManager.Publish(MeetingSdk.NetAgent.Models.MediaType.VideoDoc, docCameras.FirstOrDefault());

                    MeetingResult <int> publishDocMicResult = await _windowManager.Publish(MeetingSdk.NetAgent.Models.MediaType.AudioDoc, docMics.FirstOrDefault());

                    if (publishDocCameraResult.StatusCode != 0 || publishDocMicResult.StatusCode != 0)
                    {
                        ShareToggleItem.IsChecked = false;
                        MessageQueueManager.Instance.AddError("打开课件失败!");
                        return;
                    }

                    AppCache.AddOrUpdate(CacheKey.DocVideoResourceId, publishDocCameraResult.Result);
                    AppCache.AddOrUpdate(CacheKey.DocAudioResourceId, publishDocMicResult.Result);
                    AppCache.AddOrUpdate(CacheKey.IsDocOpen, true);
                }
                else
                {
                    object docCameraResourceIdObj = AppCache.TryGet(CacheKey.DocVideoResourceId);
                    int    docCameraResourceId;
                    if (docCameraResourceIdObj == null || !int.TryParse(docCameraResourceIdObj.ToString(), out docCameraResourceId))
                    {
                        return;
                    }

                    object docAudioResourceIdObj = AppCache.TryGet(CacheKey.DocAudioResourceId);
                    int    docAudioResourceId;
                    if (docAudioResourceIdObj == null || !int.TryParse(docAudioResourceIdObj.ToString(), out docAudioResourceId))
                    {
                        return;
                    }

                    MeetingResult stopShareCameraResult = await _windowManager.Unpublish(MeetingSdk.NetAgent.Models.MediaType.VideoDoc, docCameraResourceId);

                    MeetingResult stopShareMicResult = await _windowManager.Unpublish(MeetingSdk.NetAgent.Models.MediaType.AudioDoc, docAudioResourceId);

                    if (stopShareCameraResult.StatusCode != 0 || stopShareMicResult.StatusCode != 0)
                    {
                        ShareToggleItem.IsChecked = true;
                        MessageQueueManager.Instance.AddError("关闭课件失败!");
                        return;
                    }

                    //CheckClassModeAsync(ModeDisplayerType.InteractionMode);

                    AppCache.AddOrUpdate(CacheKey.IsDocOpen, false);
                }

                CheckClassMode();
            }
            catch (Exception)
            {
            }
            finally
            {
                _isProcessingShareOperation = false;
            }
        }
 private void OnDeviceLostNoticeEvent(MeetingResult <ResourceModel> obj)
 {
     _eventAggregator.GetEvent <DeviceLostNoticeEvent>().Publish(obj.Result);
 }
 private void OnDeviceStatusChangedEvent(MeetingResult <DeviceStatusModel> obj)
 {
     _eventAggregator.GetEvent <DeviceStatusChangedEvent>().Publish(obj.Result);
 }