示例#1
0
        public async Task BroadcastAsync(WebSocketMessageContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (context.Value == null)
            {
                throw new ArgumentNullException(nameof(context.Value));
            }

            if (!Connections.Any())
            {
                return;
            }

            var segments   = context.ToSegment();
            var descriptor = new WebSocketMessageDescriptor
            {
                Segments     = segments,
                EndOfMessage = true,
                MessageType  = WebSocketMessageType.Text
            };

            _sendFrameAsyncLock.Wait();
            foreach (var connection in Connections)
            {
                await SendAsync(connection.Value, descriptor);
            }
            _sendFrameAsyncLock.Release();
        }
示例#2
0
        public Task SendAsync(string connectionId, WebSocketMessageContext context)
        {
            if (!Connections.Any())
            {
                return(TaskCache.CompletedTask);
            }

            WebSocketTransport transport = null;

            if (!Connections.TryGetValue(connectionId, out transport))
            {
                throw new ArgumentOutOfRangeException(nameof(transport));
            }

            var segments   = context.ToSegment();
            var descriptor = new WebSocketMessageDescriptor
            {
                Segments     = segments,
                EndOfMessage = true,
                MessageType  = WebSocketMessageType.Text
            };

            return(SendAsync(transport, descriptor));
        }