コード例 #1
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();
                }));
            }
            // 同步画面资源信息。
        }
コード例 #2
0
        public void SetVideoBox(VideoBox videoBox)
        {
            if (videoBox == null)
            {
                throw new ArgumentNullException(nameof(videoBox));
            }

            if (!_items.ContainsKey(videoBox.Name))
            {
                _items.Add(videoBox.Name, videoBox);
            }
            else
            {
                _items[videoBox.Name] = videoBox;
            }
        }
コード例 #3
0
ファイル: MeetingWindow.cs プロジェクト: wuscier/MeetingSdk2
        static void OnAttachChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            WindowsFormsHost host = d as WindowsFormsHost;
            var name = e.NewValue as string;

            if (string.IsNullOrEmpty(name) || e.NewValue == e.OldValue || host == null)
            {
                return;
            }

            host.ChildChanged += Host_ChildChanged;
            var windowManager = IoC.Get <IMeetingWindowManager>();
            var videoBox      = new VideoBox(name, host);

            SetVideoBox(d, videoBox);
            windowManager.VideoBoxManager?.SetVideoBox(videoBox);
        }
コード例 #4
0
ファイル: Extensions.cs プロジェクト: wuscier/MeetingSdk2
        public static VideoBox Copy(this VideoBox videoBox)
        {
            VideoBox copiedVideoBox = new VideoBox(videoBox.Name, videoBox.Host);

            copiedVideoBox.AccountResource = videoBox.AccountResource;
            copiedVideoBox.VideoBoxType    = videoBox.VideoBoxType;
            copiedVideoBox.Visible         = videoBox.Visible;

            copiedVideoBox.PosX   = videoBox.PosX;
            copiedVideoBox.PosY   = videoBox.PosY;
            copiedVideoBox.Height = videoBox.Height;
            copiedVideoBox.Width  = videoBox.Width;

            copiedVideoBox.Sequence = videoBox.Sequence;

            return(copiedVideoBox);
        }
コード例 #5
0
        public VideoStreamModel[] GetVideoStreamModels(Size canvasSize)
        {
            List <IVideoBox> copiedVideoBoxs = new List <IVideoBox>();

            foreach (IVideoBox item in GetVisibleVideoBoxs())
            {
                VideoBox videoBox   = item as VideoBox;
                var      copiedItem = videoBox.Copy();
                copiedVideoBoxs.Add(copiedItem);
            }


            if (LayoutRendererStore.CurrentLayoutRenderType == LayoutRenderType.AutoLayout)
            {
                ModeDisplayerStore.Create().Display(copiedVideoBoxs, canvasSize);
            }
            else
            {
                LayoutRendererStore.Create().Render(copiedVideoBoxs, canvasSize, GetSpecialVideoBoxName(LayoutRendererStore.CurrentLayoutRenderType));
            }

            List <VideoStreamModel> videoStreamModels = new List <VideoStreamModel>();

            foreach (var copiedVideoBox in copiedVideoBoxs)
            {
                VideoStreamModel videoStreamModel = new VideoStreamModel()
                {
                    AccountId = copiedVideoBox.AccountResource.AccountModel.AccountId.ToString(),
                    Height    = (int)Math.Round(copiedVideoBox.Height),
                    StreamId  = copiedVideoBox.AccountResource.ResourceId,
                    Width     = (int)Math.Round(copiedVideoBox.Width),
                    X         = (int)Math.Round(copiedVideoBox.PosX),
                    Y         = (int)Math.Round(copiedVideoBox.PosY),
                };

                VideoBox videoBox = copiedVideoBox as VideoBox;
                videoStreamModel.VideoType = videoBox.AccountResource.MediaType == MediaType.VideoDoc ? VideoType.DataType : VideoType.VideoType;

                videoStreamModels.Add(videoStreamModel);
            }

            return(videoStreamModels.ToArray());
        }
コード例 #6
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();
        }
コード例 #7
0
        public bool TryGet(AccountModel accountModel, VideoBoxType videoBoxType, MediaType mediaType, out VideoBox videoBox)
        {
            videoBox = null;
            try
            {
                Monitor.Enter(_items);
                foreach (var item in _items.Values.Where(m => m.VideoBoxType == videoBoxType))
                {
                    if (videoBox == null && item.AccountResource == null)
                    {
                        videoBox = item;
                    }

                    if (item.AccountResource?.AccountModel.AccountId == accountModel.AccountId)
                    {
                        videoBox = item;
                    }
                }
                if (videoBox != null)
                {
                    videoBox.AccountResource = new AccountResource(accountModel, 0, mediaType);
                    videoBox.Sequence        = _items.Values.DefaultIfEmpty().Max(v => v.Sequence) + 1;
                }
            }
            finally
            {
                Monitor.Exit(_items);
            }
            return(videoBox != null);
        }
コード例 #8
0
        private void SetDataBindings(VideoBox videoBox)
        {
            var host = ExtendedView as IHost;

            if (host != null)
            {
                var winHost = host.Hosts.FirstOrDefault(h => h.Name == videoBox.Name);
                if (winHost != null)
                {
                    var picBox = winHost.Child as PictureBox;

                    if (picBox != null)
                    {
                        picBox.Tag = videoBox.AccountResource;

                        if (picBox.Controls.Count == 0)
                        {
                            picBox.Paint += (sender, args) =>
                            {
                                PictureBox pictureBox = sender as PictureBox;

                                if (pictureBox != null)
                                {
                                    AccountResource accountResource = pictureBox.Tag as AccountResource;
                                    if (accountResource != null)
                                    {
                                        Label lbl = pictureBox.Controls[0] as Label;

                                        lbl.AutoSize = true;
                                        lbl.Visible  = true;

                                        if (accountResource.AccountModel.AccountId == windowManager.HostId && accountResource.MediaType == NetAgent.Models.MediaType.VideoDoc)
                                        {
                                            lbl.Text = accountResource.AccountModel.AccountName + "(课件)";
                                        }
                                        else
                                        {
                                            lbl.Text = accountResource.AccountModel.AccountName;
                                        }

                                        lbl.Visible  = !string.IsNullOrEmpty(accountResource.AccountModel.AccountName);
                                        lbl.Location = new System.Drawing.Point((pictureBox.Width - lbl.Width) / 2,
                                                                                pictureBox.Height - lbl.Height - 30);
                                        System.Console.WriteLine($"pictureBox.Tag:{accountResource.AccountModel.AccountId}, {accountResource.AccountModel.AccountName}");
                                        System.Console.WriteLine($"lbl.Text:{lbl.Text}");
                                        // System.Console.WriteLine($"videoBox:{videoBox.Name}, {videoBox.AccountResource.AccountModel.AccountId}, {videoBox.AccountResource.AccountModel.AccountName}");
                                    }
                                }
                            };

                            Label label = new Label()
                            {
                                TextAlign = ContentAlignment.MiddleCenter,
                                BackColor = System.Drawing.Color.White,
                                ForeColor = System.Drawing.Color.Black,
                                Visible   = false
                            };

                            picBox.Controls.Add(label);
                        }


                        videoBox.Handle = picBox.Handle;
                    }

                    Binding wBinding = new Binding("Width")
                    {
                        Source = videoBox
                    };
                    winHost.SetBinding(FrameworkElement.WidthProperty, wBinding);

                    Binding hBinding = new Binding("Height")
                    {
                        Source = videoBox
                    };
                    winHost.SetBinding(FrameworkElement.HeightProperty, hBinding);

                    Binding xBinding = new Binding("PosX")
                    {
                        Source = videoBox
                    };
                    winHost.SetBinding(Canvas.LeftProperty, xBinding);

                    Binding yBinding = new Binding("PosY")
                    {
                        Source = videoBox
                    };
                    winHost.SetBinding(Canvas.TopProperty, yBinding);

                    Binding vBinding = new Binding("Visible")
                    {
                        Source    = videoBox,
                        Converter = new BooleanToVisibilityConverter(),
                    };

                    winHost.SetBinding(UIElement.VisibilityProperty, vBinding);
                }
            }
        }