protected override void OnSessionNewMessage(WebSocketSession session, WebSocketMessage message) { if (message.Opcode == WebSocketOpcode.Text) { string m = Encoding.UTF8.GetString(message.Message); ChatProtocol chatMessage = JsonConvert.DeserializeObject <ChatProtocol>(m); if (string.IsNullOrEmpty(chatMessage.UserName)) { session.Close("UserName missed", WebSocketCloseStatusCode.InternalServerError); Sessions.Remove(session.SessionID); return; } if (chatMessage.CommandType == "Login") { if (Room.ContainsUser(chatMessage.UserName)) { chatMessage.CommandType = "Error"; chatMessage.Message = "User have been already in chatroom"; session.Close("User have already logined", WebSocketCloseStatusCode.InternalServerError); Sessions.Remove(session.SessionID); return; } else { Room.AddUser(chatMessage.UserName, session.RemoteEndpoint); var remotelist = Room.RemoteEndpointList; foreach (var remote in remotelist) { WebSocketSession s = Sessions[remote]; if (s != null) { if (!s.Send(m)) { Sessions.Remove(session.SessionID); string user = Room.GetUser(remote); if (!string.IsNullOrEmpty(user)) { Room.RemoveUser(user); } } } } return; } } else if (chatMessage.CommandType == "Message") { var remotelist = Room.RemoteEndpointList; foreach (var remote in remotelist) { WebSocketSession s = Sessions[remote]; if (s != null) { if (!s.Send(m)) { Sessions.Remove(session.SessionID); string user = Room.GetUser(remote); if (!string.IsNullOrEmpty(user)) { Room.RemoveUser(user); } } } } } else { return; } } }