Example #1
0
        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);
            }
        }