public void SendMessage(List<string> clientIds, string messageName, string message)
{
if (clientIds == null) return;
try
{
lock (_Clients)
{
clientIds = clientIds.ToList();
foreach (var clientId in clientIds)
{
if (!_ClientIdToSessId.ContainsKey(clientId)
|| _ClientIdToSessId[clientId].Any(x => !_PollAccessControlService.AllowSendMessage(x, messageName, messageName)))
{
continue;
}
if (_Clients.ContainsKey(clientId))
{
var client = _Clients[clientId];
if ((DateTime.UtcNow - client.LastSeen).TotalSeconds > CLIENT_TIMEOUT)
{
RemoveClientId(client.Id);
_Clients.Remove(client.Id);
continue;
}
client.SendMessage(new Message()
{
success = true,
retcode = Message.RetCodes.Ok,
messageName = messageName,
data = message
});
}
}
}
}
catch (Exception ex)
{
_Logger.LogException(ex, "Error sending message '" + messageName + "' to clients. Message: " + message);
}
}