Beispiel #1
0
        private void SendToAllSubscribers <T>(WebSocketJsonType type, T data)
        {
            var wsToRemove = new List <WebSocket>();
            var segment    = ConvertToBytesWithType(type, data);

            lock (_webSockets)
            {
                foreach (var ws in _webSockets)
                {
                    if (ws.Value.Second.IsCompleted)
                    {
                        if (_users.TryGetValue(ws.Value.First, out var user))
                        {
                            user.Online = false;
                        }
                        wsToRemove.Add(ws.Key);
                    }
                    else
                    {
                        ws.Key.SendAsync(segment, WebSocketMessageType.Binary, false, CancellationToken.None).Wait();
                    }
                }

                foreach (var ws in wsToRemove)
                {
                    _webSockets.Remove(ws);
                }
            }
        }
Beispiel #2
0
        private static ArraySegment <byte> ConvertToBytesWithType <T>(WebSocketJsonType type, T data)
        {
            var responseStr  = JsonConvert.SerializeObject(data);
            var buffer       = Encoding.UTF8.GetBytes(responseStr);
            var buffWithType = new byte[buffer.Length + 1];

            buffWithType[0] = (byte)type;

            Buffer.BlockCopy(buffer, 0, buffWithType, 1, buffer.Length);

            return(new ArraySegment <byte>(buffWithType));
        }