Squirrowse/Squirrowse.Client/Service/ActionDispatcher.cs

52 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR.Client;
using Microsoft.Extensions.Logging;
using Squirrowse.Core.Models;
using Squirrowse.Core.Services;
namespace Squirrowse.Client.Service
{
public class ActionDispatcher : IActionDispatcher
{
private readonly ICameraService camera;
private readonly IConnectionManager connectionManager;
private readonly ILogger<ActionDispatcher> logger;
private readonly HubConnection session;
public ActionDispatcher(ILogger<ActionDispatcher> logger, IConnectionManager connectionManager,
ICameraService camera)
{
this.connectionManager = connectionManager;
this.logger = logger;
this.camera = camera;
session = connectionManager.GetConnection().Result;
session.On("Start", StartStream);
session.On("Stop", StopStream);
}
public Task StopStream()
{
throw new NotImplementedException();
}
public async Task SayHello()
{
await session.SendAsync("AddToGroup", Groups.debug);
}
public async Task SendStreamAsync(IAsyncEnumerable<byte[]> asb)
{
logger.LogInformation($"{nameof(SendStreamAsync)} Start stream");
await session.SendAsync("UploadByteStream", asb);
logger.LogInformation($"{nameof(SendStreamAsync)} End stream");
}
public async Task StartStream()
{
await SendStreamAsync(camera.GetFramesAsyncEnumerator());
}
}
}