mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-01-29 04:15:00 +00:00
When multiple UI applications were connecting using the same token, the actual websocket connection was getting lost, and could eventually be garbage-collected, leading to odd behavior from the UI. This is due to an existing client getting replaced and a reference to it lost. This has now been remedied, with each client getting a unique instance with a unique client ID.
74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
using System;
|
|
using System.Threading;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Converters;
|
|
using PepperDash.Core;
|
|
using PepperDash.Core.Logging;
|
|
using PepperDash.Essentials.AppServer.Messengers;
|
|
using PepperDash.Essentials.Core.Queues;
|
|
using PepperDash.Essentials.WebSocketServer;
|
|
using Serilog.Events;
|
|
|
|
namespace PepperDash.Essentials
|
|
{
|
|
public class MessageToClients : IQueueMessage
|
|
{
|
|
private readonly MobileControlWebsocketServer _server;
|
|
private readonly object msgToSend;
|
|
|
|
public MessageToClients(object msg, MobileControlWebsocketServer server)
|
|
{
|
|
_server = server;
|
|
msgToSend = msg;
|
|
}
|
|
|
|
public MessageToClients(DeviceStateMessageBase msg, MobileControlWebsocketServer server)
|
|
{
|
|
_server = server;
|
|
msgToSend = msg;
|
|
}
|
|
|
|
#region Implementation of IQueueMessage
|
|
|
|
public void Dispatch()
|
|
{
|
|
try
|
|
{
|
|
if (_server == null)
|
|
{
|
|
Debug.LogMessage(LogEventLevel.Warning, "Cannot send message. Server is null");
|
|
return;
|
|
}
|
|
|
|
var message = JsonConvert.SerializeObject(msgToSend, Formatting.None,
|
|
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Converters = { new IsoDateTimeConverter() } });
|
|
|
|
var clientSpecificMessage = msgToSend as MobileControlMessage;
|
|
if (clientSpecificMessage.ClientId != null)
|
|
{
|
|
var clientId = clientSpecificMessage.ClientId;
|
|
|
|
_server.LogVerbose("Message TX To client {clientId} Message: {message}", clientId, message);
|
|
|
|
_server.SendMessageToClient(clientId, message);
|
|
|
|
return;
|
|
}
|
|
|
|
_server.SendMessageToAllClients(message);
|
|
|
|
_server.LogVerbose("Message TX To all clients: {message}", message);
|
|
}
|
|
catch (ThreadAbortException)
|
|
{
|
|
//Swallowing this exception, as it occurs on shutdown and there's no need to print out a scary stack trace
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.LogMessage(ex, "Caught an exception in the Transmit Processor");
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
} |