public static async Task <bool> PostMessage(SSEMessage message) { Client client; var cnt = _clients.Count(); if (_clients.TryGetValue(message.clientID, out client)) { try { if (message.payload.message == "DUMMY") { client.UpdateAccessTime(); } else { var data = JsonConvert.SerializeObject(message.payload); await client.WriteAndSend(data); } return(true); } catch (HttpException) { _RemoveClient(client.id); } catch (Exception) { //also needs to log here _RemoveClient(client.id); } return(false); } return(false); }
public async Task <HttpResponseMessage> Post([FromBody] SSEMessage message) { var res = await PostMessage(message); if (res) { var response = Request.CreateResponse(HttpStatusCode.Created); return(response); } return(Request.CreateResponse(HttpStatusCode.NotFound)); }
private static async Task TryGetAndPostMessages(CancellationToken ct) { //Demo Test: Generating Random messages at random intervals and send it to clients var rnd = new Random(); await Task.Delay(rnd.Next(1000, 3000), ct); if (ct.IsCancellationRequested) { return; } var clients = _clients.Values.ToArray(); Array.ForEach(clients, async client => { var msg = new SSEMessage { clientID = client.id, payload = new Payload { message = getQuote() } }; var res = await PostMessage(msg); }); }