private async Task OnMessageReceive(IdentifiableWebSocket socket, WebSocketReceiveResult result, byte[] buffer, CancellationToken cancellationToken) { var message = Encoding.UTF8.GetString(buffer, 0, result.Count); var request = JsonSerializer.Deserialize <ClientRequest>(message); if (request.Action == RequestedClientActionEnum.Show) { await socket.SendMessageAsync(JsonSerializer.Serialize(_provider.GetProcesses()), cancellationToken); } else if (request.Action == RequestedClientActionEnum.Subscribe) { socket.Subscribed = true; } else if (request.Action == RequestedClientActionEnum.Unsubscribe) { socket.Subscribed = false; } }
/// <summary> /// Starts broadcast /// </summary> /// <param name="webSocketHandler">websocket broadcast handler</param> /// <param name="cachedProcessesProvider">Container of processes infromation</param> public async Task InvokeAsync(IWebSocketHandler webSocketHandler, ICachedProcessesProvider cachedProcessesProvider, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await webSocketHandler.SendMessageToSubscribedAsync(JsonSerializer.Serialize(cachedProcessesProvider.GetProcesses()), cancellationToken); await Task.Delay(1000); } }