public async Task BroadcastJsonMessage(string jsonMessage)
        {
            try
            {
                WebSocketItem webSocketItem = JsonConvert.DeserializeObject <WebSocketItem>(jsonMessage);
                Clients.All.broadcastMessage(webSocketItem.Name, webSocketItem.Message);

                foreach (var client in WebSocketClients)
                {
                    await client.Value.webSocket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(jsonMessage)), WebSocketMessageType.Text, true, CancellationToken.None);
                }
            }
            catch (Exception)
            {
            }
        }
        public Task BroadcastMessage(string name, string message)
        {
            WebSocketItem webSocketItem = new WebSocketItem
            {
                Command = WebSocketCommand.ChatMsg,
                Name    = name,
                Message = message
            };

            // ref: https://www.newtonsoft.com/json/help/html/NamingStrategyCamelCase.htm (200828)
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            string jsonStr = JsonConvert.SerializeObject(webSocketItem, new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
                Formatting       = Formatting.Indented
            });

            return(BroadcastJsonMessage(jsonStr));
        }