public void Creates_the_ViewModel_from_dto()
        {
            var dto = new StudioComponentDto()
            {
                Id            = 355,
                Name          = "5gjdgj",
                IsPlaceholder = true,
                Inputs        = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto()
                    {
                        IOType = Shared.EndpointIOType.Input, ConnectionType = "ghd", DataKind = Shared.DataKind.Video, Id = 1, Name = "Input 1"
                    }
                },
                Outputs = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto()
                    {
                        IOType = Shared.EndpointIOType.Output, ConnectionType = "hgffds", DataKind = Shared.DataKind.Data, Id = 1, Name = "Output 1"
                    }
                }
            };

            var vm = new PlaceholderViewModel(dto);

            Assert.AreEqual(dto.Id, vm.Id);
            Assert.AreEqual(dto.Name, vm.Name);
            Assert.AreEqual(dto.Inputs.Count, vm.Inputs.Count);
            Assert.AreEqual(dto.Outputs.Count, vm.Outputs.Count);
            Assert.AreEqual(dto.Inputs.First().Id, vm.Inputs[0].Id);
            Assert.AreEqual(dto.Outputs.First().Id, vm.Outputs[0].Id);
            Assert.AreEqual(vm, vm.Inputs[0].ComponentViewModel);
            Assert.AreEqual(vm, vm.Outputs[0].ComponentViewModel);
        }
예제 #2
0
 public PlaceholderViewModel(StudioComponentDto studioComponentDto)
     : base(studioComponentDto)
 {
     if (!studioComponentDto.IsPlaceholder)
     {
         throw new ArgumentException("Provided DTO does not describe a placeholder.");
     }
 }
예제 #3
0
        public async Task <bool> JoinVirtualStudio(string virtualStudioName, StudioComponentDto studioComponent)
        {
            string connectionId = Context.ConnectionId;

            await RemoveClientFromAnyVirtualStudioAsync(connectionId);
            await AddClientToVirtualStudioAsync(connectionId, virtualStudioName, studioComponent);

            return(true);
        }
        public void Throws_ArgumentException_when_IsPlaceholder_is_set_to_false()
        {
            var dto = new StudioComponentDto()
            {
                IsPlaceholder = false,
            };

            Assert.ThrowsException <ArgumentException>(() => new PlaceholderViewModel(dto));
        }
        public Task AddPlaceholderNode(string virtualStudioName, StudioComponentDto component, float x, float y)
        {
            virtualStudioViewModel.ComponentNodes.Add(new ComponentNodeViewModel()
            {
                Component = new PlaceholderViewModel(component), PositionX = x, PositionY = y
            });

            return(Task.CompletedTask);
        }
 private WebRtcManager(IVirtualStudioConnection virtualStudioConnection, StudioComponentDto studioComponent, IJSRuntime jsRuntime, ElementReference receivingVideoElement, ElementReference rtpTimestamp)
 {
     this.studioComponent         = studioComponent;
     this.virtualStudioConnection = virtualStudioConnection;
     this.jsRuntime             = jsRuntime;
     this.receivingVideoElement = receivingVideoElement;
     this.rtpTimestamp          = rtpTimestamp;
     objRef = DotNetObjectReference.Create(this);
     virtualStudioConnection.AddListener(this);
 }
예제 #7
0
        public void Adds_a_Placeholder_to_ComponentNodes()
        {
            var updater        = new VirtualStudioViewModelUpdater(viewModel);
            var placeholderDto = new StudioComponentDto
            {
                Id            = 10,
                IsPlaceholder = true,
            };

            updater.AddPlaceholderNode(virtualStudioName, placeholderDto, 123, 456);

            var addedComponentNode = viewModel.ComponentNodes.First(c => c.Component.Id == 10);

            Assert.AreEqual(123, addedComponentNode.PositionX);
            Assert.AreEqual(456, addedComponentNode.PositionY);
        }
예제 #8
0
        public void Adds_a_placeholder_to_repository()
        {
            var placeholderDto = new StudioComponentDto
            {
                Id            = 10,
                Name          = "Placeholder 10",
                IsPlaceholder = true,
                Outputs       = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto
                    {
                        IOType = Shared.EndpointIOType.Output,
                        Id     = 1
                    }
                },
                Inputs = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto
                    {
                        IOType = Shared.EndpointIOType.Input,
                        Id     = 2
                    },
                    new StudioComponentEndpointDto
                    {
                        IOType = Shared.EndpointIOType.Input,
                        Id     = 3
                    }
                }
            };

            var updater = new VirtualStudioViewModelUpdater(viewModel);

            updater.AddPlaceholderToRepository(virtualStudioName, placeholderDto);

            var addedClient = viewModel.ComponentRepository.Placeholders.First(c => c.Id == 10);

            Assert.AreEqual(placeholderDto.Name, addedClient.Name);
            Assert.IsTrue(addedClient is PlaceholderViewModel);
            Assert.AreEqual(placeholderDto.Outputs.Count, addedClient.Outputs.Count);
            Assert.AreEqual(placeholderDto.Inputs.Count, addedClient.Inputs.Count);
            Assert.AreEqual(placeholderDto.Inputs.First().IOType, addedClient.Inputs[0].IOType);
            Assert.AreEqual(placeholderDto.Outputs.First().IOType, addedClient.Outputs[0].IOType);
            CollectionAssert.AreEqual(placeholderDto.Outputs.Select(o => o.Id).ToArray(), addedClient.Outputs.Select(o => o.Id).ToArray());
            CollectionAssert.AreEqual(placeholderDto.Inputs.Select(o => o.Id).ToArray(), addedClient.Inputs.Select(o => o.Id).ToArray());
        }
 public ComponentViewModel(StudioComponentDto studioComponentDto)
 {
     Id   = studioComponentDto.Id;
     Name = studioComponentDto.Name;
     if (studioComponentDto.Inputs != null)
     {
         foreach (var input in studioComponentDto.Inputs)
         {
             Inputs.Add(new StudioComponentEndpointViewModel(this, input));
         }
     }
     if (studioComponentDto.Outputs != null)
     {
         foreach (var output in studioComponentDto.Outputs)
         {
             Outputs.Add(new StudioComponentEndpointViewModel(this, output));
         }
     }
 }
예제 #10
0
        async Task ConnectToServer()
        {
            virtualStudioConnection = await SignalRVirtualStudioConnection.CreateAsync("192.168.2.109", 5001, true);

            virtualStudioConnection.AddListener(this);

            StudioComponentDto studioComponentDto = new StudioComponentDto
            {
                Name          = "AR Camera",
                IsPlaceholder = false,
                Inputs        = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto()
                    {
                        IOType = EndpointIOType.Input, ConnectionType = "WebRTC", DataKind = DataKind.Video, Id = 2, Name = "Feedback"
                    }
                },
                Outputs = new List <StudioComponentEndpointDto>
                {
                    new StudioComponentEndpointDto()
                    {
                        IOType = EndpointIOType.Output, ConnectionType = "WebRTC", DataKind = DataKind.VideoAudio, Id = 1, Name = "Video"
                    }
                }
            };

            bool success = await virtualStudioConnection.JoinVirtualStudio(virtualStudioName, studioComponentDto);

            if (success)
            {
                Console.WriteLine($"Joined '{virtualStudioName}' successfully.");
            }
            else
            {
                Console.WriteLine($"Joining '{virtualStudioName}' failed.");
            }
        }
예제 #11
0
        private async Task AddClientToVirtualStudioAsync(string connectionId, string virtualStudioName, StudioComponentDto studioComponentDto)
        {
            await Groups.AddToGroupAsync(connectionId, virtualStudioName);

            connectionIdToGroupMapping[connectionId] = virtualStudioName;
            logger.LogInformation($"StudioClient '{Context.ConnectionId}' joined {virtualStudioName}");
            if (virtualStudios.TryGetVirtualStudio(virtualStudioName, out Core.VirtualStudio virtualStudio))
            {
                var studioClient = new SignalRStudioClient(virtualStudioName, connectionId, virtualStudioClientProvider, studioComponentDto);
                connectionIdToStudioClientMapping[connectionId] = studioClient;
                virtualStudio.ComponentRepository.AddClient(studioClient.StudioComponent);
                virtualStudio.AddComponent(studioClient.StudioComponent);
            }
        }
        public Task AddPlaceholderToRepository(string virtualStudioName, StudioComponentDto component)
        {
            virtualStudioViewModel.ComponentRepository.Placeholders.Add(new PlaceholderViewModel(component));

            return(Task.CompletedTask);
        }
 public Task AddPlaceholder(string virtualStudioName, StudioComponentDto component)
 {
     // Do nothing.
     return(Task.CompletedTask);
 }
        public Task AddClientToRepository(string virtualStudioName, StudioComponentDto component)
        {
            virtualStudioViewModel.ComponentRepository.Clients.Add(new ComponentViewModel(component));

            return(Task.CompletedTask);
        }
예제 #15
0
 public Task <bool> JoinVirtualStudio(string virtualStudioName, StudioComponentDto studioComponent)
 => hubConnection.InvokeAsync <bool>(nameof(JoinVirtualStudio), virtualStudioName, studioComponent);
예제 #16
0
 public Task <OperationResponse> AddPlaceholderToRepository(StudioComponentDto placeholder)
 => InvokeIfConnected(() => HubConnection.InvokeAsync <OperationResponse>(nameof(AddPlaceholderToRepository), placeholder));
예제 #17
0
 public AddPlaceholderToRepositoryCommand(StudioComponentDto component)
 {
     this.component = component;
 }
 public Task <OperationResponse> AddPlaceholderToRepository(StudioComponentDto placeholder)
 => ExecuteOperation(new AddPlaceholderToRepositoryCommand(placeholder));
 public Task AddPlaceholderNode(string virtualStudioName, StudioComponentDto component, float x, float y) => GetGroup(virtualStudioName).AddPlaceholderNode(virtualStudioName, component, x, y);
 public Task AddPlaceholderToRepository(string virtualStudioName, StudioComponentDto component) => GetGroup(virtualStudioName).AddPlaceholderToRepository(virtualStudioName, component);
        public static async Task <WebRtcManager> CreateAsync(IVirtualStudioConnection virtualStudioConnection, StudioComponentDto studioComponent, IJSRuntime jsRuntime, ElementReference receivingVideoElement, ElementReference rtpTimestamp)
        {
            var manager = new WebRtcManager(virtualStudioConnection, studioComponent, jsRuntime, receivingVideoElement, rtpTimestamp);

            manager.handlerId = await jsRuntime.InvokeAsync <int>("WebRtcHandlerManager.createHandler");

            return(manager);
        }