       @userState.socketsCount (error, nsockets) =>
         if error
           return makeServerError @errorBuilder, error
-        if nsockets > 0 then return cb()
+        if nsockets > 0 then return
         @userState.roomsGetAll (error, rooms) =>
           if error
             return makeServerError @errorBuilder, error

          wrappedError = makeServerError @errorBuilder, error
          return sendResult socket, idcmd, cb, wrappedError
        if @enableUserlistUpdates
          @broadcast socket, roomName, 'roomUserJoin', roomName, @username
        makeClosure = (toSocket, id) ->
          thisID = socket.id
          return (error) ->
            # TODO other sockets errors handling
            if thisID == id
              sendResult socket, idcmd, cb, error
            toSocket.emit 'roomJoined', roomName
        # TODO lock user state
        @userState.socketsGetAll (error, sockets) =>
          if error
            wrappedError = makeServerError @errorBuilder, error
            return sendResult socket, idcmd, cb, wrappedError
          for own id, toSocket of sockets
            toSocket.join roomName, makeClosure toSocket, id

  roomLeave : (socket, idcmd, cb
  , roomName) ->

    unless fromUser
      error = @errorBuilder.makeError 'noUserOnline', @username
      return sendResult socket, idcmd, cb, error
    processMessage msg
    toUser.message @username, msg, (error) =>
      if error
        return sendResult socket, idcmd, cb, error
      fromUser.userState.socketsGetAll (error, sockets) =>
        if error
          wrappedError = makeServerError @errorBuilder, error
          return sendResult socket, idcmd, cb, wrappedError
        for id in sockets
          if id != socket.id
            @send id, 'directMessageEcho', toUserName, msg
        toUser.userState.socketsGetAll (error, sockets) =>
          if error
            wrappedError = makeServerError @errorBuilder, error
            return sendResult socket, idcmd, cb, wrappedError
          for id in sockets
            @send id, 'directMessage', @username, msg
          sendResult socket, idcmd, cb

  directRemoveFromList : (socket, idcmd, cb
