2019-11-06 17:02:06 +01:00
|
|
|
@page "/hub"
|
|
|
|
|
|
|
|
<h3>Hub</h3>
|
|
|
|
|
|
|
|
@using Microsoft.AspNetCore.SignalR.Client
|
|
|
|
@using Squirrowse.Core.Models
|
|
|
|
@using Squirrowse.Core.Services
|
|
|
|
@inject IConnectionManager _connection;
|
|
|
|
<div class="card border-primary mb-3" style="max-width: 20rem;">
|
2019-11-06 19:17:06 +01:00
|
|
|
@if (agents.Any())
|
2019-11-06 17:02:06 +01:00
|
|
|
{
|
|
|
|
@foreach (var agent in agents)
|
|
|
|
{
|
|
|
|
<div class="card-body">
|
|
|
|
<div>
|
|
|
|
<h3 class="badge-primary">
|
2019-11-06 19:17:06 +01:00
|
|
|
@agent.AgentName -> @agent.UserType.ToString()
|
2019-11-06 17:02:06 +01:00
|
|
|
</h3>
|
|
|
|
<div style="padding-top:10px">
|
2019-11-06 19:17:06 +01:00
|
|
|
<button id="ViewCast" disabled="@(IsViewingCastOf(agent.AgentName))" class="btn btn-success btn-sm" @onclick="@(() => OnViewCastClicked(agent.ConnectionId))">
|
2019-11-06 17:02:06 +01:00
|
|
|
View cast
|
|
|
|
</button>
|
|
|
|
|
2019-11-06 19:17:06 +01:00
|
|
|
<button id="StopViewCast" disabled="@(!IsViewingCastOf(agent.AgentName))" class="btn btn-warning btn-sm" @onclick="@(() => OnStopViewCastClicked(agent.ConnectionId))">
|
2019-11-06 17:02:06 +01:00
|
|
|
Stop cast
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
<div class="card-body">
|
|
|
|
<h3 class="card-header badge-warning">No Cams</h3>
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="border">
|
|
|
|
<img id='screenImage' src="@imageSource" />
|
|
|
|
</div>
|
|
|
|
@code{
|
|
|
|
|
2019-11-06 19:17:06 +01:00
|
|
|
private IEnumerable<User> agents = new List<User>();
|
2019-11-06 17:02:06 +01:00
|
|
|
|
|
|
|
HubConnection connection;
|
|
|
|
string imageSource = null;
|
|
|
|
string CurrentViewCastAgent = null;
|
|
|
|
|
|
|
|
protected async override Task OnInitializedAsync()
|
|
|
|
{
|
|
|
|
await _connection.InitConnection(ConnectionType.Server);
|
|
|
|
connection = await _connection.GetConnection();
|
2019-11-06 19:17:06 +01:00
|
|
|
|
2019-11-06 17:02:06 +01:00
|
|
|
connection.On<IAsyncEnumerable<byte[]>>("RecData", OnStreamDataReceived);
|
2019-11-06 19:17:06 +01:00
|
|
|
agents = await connection.InvokeAsync<IEnumerable<User>>("GetListOfTypeUser",ConnectionType.Client);
|
2019-11-06 17:02:06 +01:00
|
|
|
//connection.On<string>("NewScreenCastAgent", NewScreenCastAgent);
|
|
|
|
//connection.On<string>("RemoveScreenCastAgent", RemoveScreenCastAgent);
|
|
|
|
//connection.On<string>("OnStreamDataReceived", OnStreamDataReceived);
|
|
|
|
|
|
|
|
//await connection.StartAsync();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool IsViewingCastOf(string agentName)
|
|
|
|
{
|
|
|
|
return agentName == CurrentViewCastAgent;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async void OnStreamDataReceived(IAsyncEnumerable<byte[]> streamData)
|
|
|
|
{
|
|
|
|
await foreach (var t in streamData)
|
|
|
|
{
|
|
|
|
var base64 = Convert.ToBase64String(t);
|
|
|
|
imageSource = String.Format("data:image/jpg;base64,{0}", base64);
|
|
|
|
StateHasChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private async Task OnViewCastClicked(string agentName)
|
|
|
|
{
|
|
|
|
CurrentViewCastAgent = agentName;
|
2019-11-06 19:17:06 +01:00
|
|
|
await connection.InvokeAsync("Startstream", agentName);
|
2019-11-06 17:02:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private async Task OnStopViewCastClicked(string agentName)
|
|
|
|
{
|
|
|
|
CurrentViewCastAgent = null;
|
2019-11-06 19:17:06 +01:00
|
|
|
await connection.InvokeAsync("Stopstream", agentName);
|
2019-11-06 17:02:06 +01:00
|
|
|
imageSource = null;
|
|
|
|
StateHasChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|