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(); })); } // 同步画面资源信息。 }
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; } }
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); }
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); }
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()); }
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(); }
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); }
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); } } }