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;
         }
     }
 }