コード例 #1
0
        public async Task WebSocketChatMessages(AspNetWebSocketContext context)
        {
            var socket = context.WebSocket;

            Monitor.Enter(_lock);
            webSockets.Add(socket);
            Monitor.Exit(_lock);

            // Listening this socket
            while (socket.State == WebSocketState.Open)
            {
                var receivedBuffer = new ArraySegment <byte>(new byte[MSG_BUFFER_SIZE]);
                // Waiting data from the socket
                var receivedResult = await socket.ReceiveAsync(receivedBuffer, CancellationToken.None);

                var stringResult = BufferToString(receivedBuffer, receivedResult.Count);
                // Add chat message to repository
                var chatMessage = JsonConvert.DeserializeObject <ChatMessage>(stringResult);
                if (chatMessage != null)
                {
                    repository.AddChatMessage(chatMessage);
                }
                // Send the message to clients
                await SendChatMessageToAll(stringResult);
            }
            // Connection has been closed. Remove this socket.
            Monitor.Enter(_lock);
            webSockets.Remove(socket);
            Monitor.Exit(_lock);
        }
コード例 #2
0
        public void AddChatMessage(string text)
        {
            string userName = ServiceSecurityContext.Current.PrimaryIdentity.Name;

            ChatMessage newChatMessage = repo.AddChatMessage(
                new ChatDataInput()
            {
                UserName = userName, Text = text
            }
                );

            BroadcastChatMessage(newChatMessage);
        }