1
0

Ajouts du mode stream + ajouts QoL.

This commit is contained in:
MarcEricMartel
2023-11-18 12:19:37 -05:00
parent 4309ab9aad
commit 2bea742a69
3 changed files with 51 additions and 11 deletions

View File

@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.ComponentModel;
namespace BlazorCanvas.Server.Components.Data;
@@ -15,13 +16,21 @@ public class CanvasService {
private IJSRuntime _jsRuntime;
private IRedisService _redisService;
private CanvasCommand _lastCommand = new();
private bool _is_started = false;
private List<CanvasCommand> _lsComms = new();
private bool _is_init = false,
_is_started = false,
_has_ended = false;
public CanvasService(IJSRuntime jsRuntime, IRedisService redisService) {
_jsRuntime = jsRuntime;
_redisService = redisService;
}
~CanvasService() {
_has_ended = true;
Task.Delay(100);
}
public string currentColor { get; set; } = "Black";
public int pointSize { get; set; } = 1;
public bool snap { get; set; }
@@ -40,6 +49,26 @@ public class CanvasService {
}
}
public async void Consume() {
while (!_has_ended) {
if (_lsComms.Count > 0)
_lsComms.Clear();
_lsComms.AddRange(await _redisService.Consume());
if (_lsComms.Count == 1)
Draw(_lsComms[0]);
else if (_lsComms.Count > 0)
Draw(_lsComms);
}
}
public async void Init() {
while (!_is_init) {
_is_init = await _redisService.InitStreamer();
if (!_is_init)
await Task.Delay(1000);
}
}
public async void Draw(IEnumerable<CanvasCommand> lsCommand) {
if (_currentCanvasContext is null) {
_currentCanvasContext = await myCanvas.CreateCanvas2DAsync();
@@ -70,8 +99,11 @@ public class CanvasService {
public async void HandleMouse(MouseEventArgs eventArgs) {
double mouseX = 0, mouseY = 0;
if (!_is_started) {
Subscribe();
if (!_is_started) {
if (!_is_init)
Init();
if (_is_init)
Consume();
_is_started = true;
}
@@ -105,10 +137,12 @@ public class CanvasService {
if (command.Equals(_lastCommand))
return; // Pour pas spammer des commandes si c'est pas pertinent.
_redisService.Publish(command);
//Draw(command); // Local
_redisService.Produce(command); // Stream
// _redisService.Publish(command); // Pub/Sub
// Draw(command); // Local
_lastCommand = command;
}