| 2172 | } |
| 2173 | |
| 2174 | Player* NetworkBase::AddPlayer(const std::string& name, const std::string& keyhash) |
| 2175 | { |
| 2176 | Player* addedplayer = nullptr; |
| 2177 | int32_t newid = -1; |
| 2178 | if (GetMode() == Mode::server) |
| 2179 | { |
| 2180 | // Find first unused player id |
| 2181 | for (int32_t id = 0; id < 255; id++) |
| 2182 | { |
| 2183 | if (std::find_if( |
| 2184 | player_list.begin(), player_list.end(), |
| 2185 | [&id](std::unique_ptr<Player> const& player) { return player->id == id; }) |
| 2186 | == player_list.end()) |
| 2187 | { |
| 2188 | newid = id; |
| 2189 | break; |
| 2190 | } |
| 2191 | } |
| 2192 | } |
| 2193 | else |
| 2194 | { |
| 2195 | newid = 0; |
| 2196 | } |
| 2197 | if (newid != -1) |
| 2198 | { |
| 2199 | std::unique_ptr<Player> player; |
| 2200 | if (GetMode() == Mode::server) |
| 2201 | { |
| 2202 | // Load keys host may have added manually |
| 2203 | _userManager.load(); |
| 2204 | |
| 2205 | // Check if the key is registered |
| 2206 | const User* networkUser = _userManager.getUserByHash(keyhash); |
| 2207 | |
| 2208 | player = std::make_unique<Player>(); |
| 2209 | player->id = newid; |
| 2210 | player->keyHash = keyhash; |
| 2211 | if (networkUser == nullptr) |
| 2212 | { |
| 2213 | player->group = GetDefaultGroup(); |
| 2214 | if (!name.empty()) |
| 2215 | { |
| 2216 | player->setName(MakePlayerNameUnique(String::trim(name))); |
| 2217 | } |
| 2218 | } |
| 2219 | else |
| 2220 | { |
| 2221 | player->group = networkUser->groupId.has_value() ? *networkUser->groupId : GetDefaultGroup(); |
| 2222 | player->setName(networkUser->name); |
| 2223 | } |
| 2224 | |
| 2225 | // Send new player list. |
| 2226 | _playerListInvalidated = true; |
| 2227 | } |
| 2228 | else |
| 2229 | { |
| 2230 | player = std::make_unique<Player>(); |
| 2231 | player->id = newid; |
nothing calls this directly
no test coverage detected