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); }
public void AddChatMessage(string text) { string userName = ServiceSecurityContext.Current.PrimaryIdentity.Name; ChatMessage newChatMessage = repo.AddChatMessage( new ChatDataInput() { UserName = userName, Text = text } ); BroadcastChatMessage(newChatMessage); }