Response::ResponseCode Server_ProtocolHandler::cmdCreateGame(const Command_CreateGame &cmd, Server_Room *room, ResponseContainer &rc) { if (authState == NotLoggedIn) return Response::RespLoginNeeded; const int gameId = databaseInterface->getNextGameId(); if (gameId == -1) return Response::RespInternalError; QMutexLocker roomLocker(&room->gamesMutex); if (server->getMaxGamesPerUser() > 0) if (room->getGamesCreatedByUser(QString::fromStdString(userInfo->name())) >= server->getMaxGamesPerUser()) return Response::RespContextError; QList<int> gameTypes; for (int i = cmd.game_type_ids_size() - 1; i >= 0; --i) gameTypes.append(cmd.game_type_ids(i)); QString description = QString::fromStdString(cmd.description()); if (description.size() > 60) description = description.left(60); Server_Game *game = new Server_Game(copyUserInfo(false), gameId, description, QString::fromStdString(cmd.password()), cmd.max_players(), gameTypes, cmd.only_buddies(), cmd.only_registered(), cmd.spectators_allowed(), cmd.spectators_need_password(), cmd.spectators_can_talk(), cmd.spectators_see_everything(), room); game->addPlayer(this, rc, false, false); room->addGame(game); return Response::RespOk; }
int Server::getGamesCount() const { int result = 0; QReadLocker locker(&roomsLock); QMapIterator<int, Server_Room *> roomIterator(rooms); while (roomIterator.hasNext()) { Server_Room *room = roomIterator.next().value(); QReadLocker roomLocker(&room->gamesLock); result += room->getGames().size(); } return result; }