From ef4c733d351ddcf02dcb47a5c47ebfc0e5dd8a23 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Mon, 24 Aug 2015 22:41:10 -0400 Subject: [PATCH] RenX::Server: * Removed "buff" local variable in Server::processLine() * Fixed gotoToken() lambda in Server::processLine() Updated Jupiter --- Jupiter | 2 +- Release/Bot.lib | Bin 25566 -> 25566 bytes Release/Plugins/RenX.Core.lib | Bin 134426 -> 134426 bytes RenX.Core/RenX_Server.cpp | 168 +++++++++++++++------------------- 4 files changed, 76 insertions(+), 94 deletions(-) diff --git a/Jupiter b/Jupiter index 2da95b3..b8bd29d 160000 --- a/Jupiter +++ b/Jupiter @@ -1 +1 @@ -Subproject commit 2da95b3b90aecddf373268fa9e12fdf9b0bdc409 +Subproject commit b8bd29d055b995835c3deb4530a23a559ae91ac0 diff --git a/Release/Bot.lib b/Release/Bot.lib index 539f2076e5624e0b12512b458be4134169df9565..25e99795ab77cc792dc14fae370f6e09c441b5b3 100644 GIT binary patch delta 2131 zcmZuyT}YE*6yDNAD{HmCY--bKX+O?FTj~CEPM!O)<<{oXIUN51{!l9r`_@>X4eg4pQq8e3Eu1Wa9CyEaj(nX?vdDI9>ZqL9k*#TnnFz>yx3X}A6ykY z;bNXriIk0kVt|luGgNvFoEGs?CM(j4kQULE!BsCG4m|Uc;`iQu9vO-gJlq!N@Z|x5 zzqR#oIN46{c>5I&H*^xb+ZX2Wbsxc#J|Bnw_(*IOiY-O4GgdP+byzt?9q+XcX<#b6 zBEvW&;nAqSl_z=SCwR_(jKiu}f2SlCRf#0Col;3_7r~CM08fJOHpROA*n<(x^LUyd zx=|0$t4iT>mt>*36ZURtCvx31g&NFY#wqA@6&P6zx7IkDruvqEWLqv^C{gOSV00N& z1rC6-s05M$$?{!26nm(ri)+Va5uHBjajgeif)acoNbDOyX^M+M!xlxrK@?Dls|oiu z)k1AZ>Kr+u(8W-Y7n%;)y%HtUOKBRAQmdrVHtvD@G6%gDttwvcA&wE;wyltrjZPgW zr4z?{c?0u#cv*(i(fn|tQO^F7hgYJBRoD!kq+YbrgBtc@D{pN+m^#H;*(YXK(Z^~|FA;b8Z z3LlzLs#Eb{xVau?2da3+4TDsuZ1B=5Y=)UZvM`LHZn1n8KU!D}lQH8e&jgV)m2e`@ zL%eFpr5iZsWBx7qm6lfS|CtWSXF5b?oxzOlXx5dwAxLG|bj<)6I@yPrwT202l>O;| z>5L7$^@UI)AE#RN<*-z>ZiL3*8IfLRd@aQeJRfP}9pR>mvrsB^qsGVewUEg&jV8FA JrO4^5{U6j8#|Z!c delta 2131 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 &xPlugins = *RenX::getCore()->getPlugins(); Jupiter::ReadableString::TokenizeResult tokens = Jupiter::StringS::tokenize(line, RenX::DelimC); @@ -1114,7 +1113,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) PARSE_PLAYER_DATA_P(token); return getPlayerOrAdd(name, id, team, isBot, 0U, Jupiter::ReferenceString::empty); }; - auto gotoToken = [&buff, &tokens](size_t index) + auto gotoToken = [&line, &tokens](size_t index) { if (index >= tokens.token_count) return Jupiter::ReferenceString::empty; @@ -1123,7 +1122,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) while (index != 0) offset += tokens.tokens[--index].size(); - return buff.substring(offset); + return Jupiter::ReferenceString::substring(line, offset + 1); }; if (tokens.tokens[0].isNotEmpty()) @@ -1167,7 +1166,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else if (this->lastCommand.equalsi("clientvarlist")) { - buff.shiftRight(1); if (this->commandListFormat.token_count == 0) this->commandListFormat = tokens; else @@ -1306,7 +1304,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } } } - buff.shiftLeft(1); } else if (this->lastCommand.equalsi("botlist")) { @@ -1318,7 +1315,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else if (this->lastCommand.equalsi("botvarlist")) { - buff.shiftRight(1); if (this->commandListFormat.token_count == 0) this->commandListFormat = tokens; else @@ -1413,11 +1409,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } } } - buff.shiftLeft(1); } else if (this->lastCommand.equalsi("binfo") || this->lastCommand.equalsi("buildinginfo") || this->lastCommand.equalsi("blist") || this->lastCommand.equalsi("buildinglist")) { - buff.shiftRight(1); if (this->commandListFormat.token_count == 0) this->commandListFormat = tokens; else @@ -1463,28 +1457,24 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) building->capturable = pair->getValue().asBool(); } } - buff.shiftLeft(1); } else if (this->lastCommand.equalsi("ping")) RenX::Server::awaitingPong = false; else if (this->lastCommand.equalsi("map")) - this->map = buff.substring(1); + this->map = std::move(Jupiter::StringS::substring(line, 1)); else if (this->lastCommand.equalsi("serverinfo")) { if (this->lastCommandParams.isEmpty()) { // "Port" | Port | "Name" | Name | "Level" | Level | "Players" | Players | "Bots" | Bots - buff.shiftRight(1); this->port = static_cast(tokens.getToken(1).asUnsignedInt(10)); this->serverName = tokens.getToken(3); this->map = tokens.getToken(5); - buff.shiftLeft(1); } } else if (this->lastCommand.equalsi("gameinfo"_jrs)) { // "PlayerLimit" | PlayerLimit | "VehicleLimit" | VehicleLimit | "MineLimit" | MineLimit | "TimeLimit" | TimeLimit | "bPassworded" | bPassworded | "bSteamRequired" | bSteamRequired | "bPrivateMessageTeamOnly" | bPrivateMessageTeamOnly | "bAllowPrivateMessaging" | bAllowPrivateMessaging | "bAutoBalanceTeams" | bAutoBalanceTeams | "bSpawnCrates" | bSpawnCrates | "CrateRespawnAfterPickup" | CrateRespawnAfterPickup - buff.shiftRight(1); this->playerLimit = tokens.getToken(1).asInt(); this->vehicleLimit = tokens.getToken(3).asInt(); this->mineLimit = tokens.getToken(5).asInt(); @@ -1496,7 +1486,6 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) this->autoBalanceTeams = tokens.getToken(17).asBool(); this->spawnCrates = tokens.getToken(19).asBool(); this->crateRespawnAfterPickup = tokens.getToken(21).asDouble(); - buff.shiftLeft(1); } else if (this->lastCommand.equalsi("mutatorlist"_jrs)) { @@ -1516,20 +1505,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) else if (this->lastCommand.equalsi("rotation"_jrs)) { // Map - buff.shiftRight(1); - if (this->hasMapInRotation(buff) == false) - this->maps.add(new Jupiter::StringS(buff)); - buff.shiftLeft(1); + Jupiter::ReferenceString in_map = Jupiter::ReferenceString::substring(line, 1); + if (this->hasMapInRotation(in_map) == false) + this->maps.add(new Jupiter::StringS(in_map)); } else if (this->lastCommand.equalsi("changename")) { - buff.shiftRight(1); RenX::PlayerInfo *player = parseGetPlayerOrAdd(tokens.getToken(0)); Jupiter::StringS newName = tokens.getToken(2); for (size_t i = 0; i < xPlugins.size(); i++) xPlugins.get(i)->RenX_OnNameChange(this, player, newName); player->name = newName; - buff.shiftLeft(1); } break; case 'l': @@ -2004,10 +1990,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnGame(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnGame(this, raw); } } else if (tokens.tokens[0].equals("CHAT")) @@ -2056,10 +2041,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) }*/ else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnOtherChat(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnOtherChat(this, raw); } } else if (tokens.tokens[0].equals("PLAYER")) @@ -2130,10 +2114,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnPlayer(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnPlayer(this, raw); } } else if (tokens.tokens[0].equals("RCON")) @@ -2146,6 +2129,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { Jupiter::ReferenceString command = gotoToken(4); Jupiter::ReferenceString cmd = command.getWord(0, " "); + if (cmd.equalsi("hostprivatesay")) { RenX::PlayerInfo *player = this->getPlayerByName(command.getWord(1, " ")); @@ -2258,10 +2242,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnRCON(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnRCON(this, raw); } } else if (tokens.tokens[0].equals("ADMIN")) @@ -2303,10 +2286,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnAdmin(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnAdmin(this, raw); } } else if (tokens.tokens[0].equals("VOTE")) @@ -2400,10 +2382,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnVote(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnVote(this, raw); } } else if (tokens.tokens[0].equals("MAP")) @@ -2444,10 +2425,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnMap(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnMap(this, raw); } } else if (tokens.tokens[0].equals("DEMO")) @@ -2479,10 +2459,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) } else { - buff.shiftRight(tokens.tokens[0].size() + 2); + Jupiter::ReferenceString raw = gotoToken(1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnDemo(this, buff); - buff.shiftLeft(tokens.tokens[0].size() + 2); + xPlugins.get(i)->RenX_OnDemo(this, raw); } } /*else if (tokens.tokens[0].equals("ERROR;")) // Decided to disable this entirely, since it's unreachable anyways. @@ -2492,78 +2471,81 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) }*/ else { - buff.shiftRight(1); + Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnLog(this, buff); - buff.shiftLeft(1); + xPlugins.get(i)->RenX_OnLog(this, raw); } } break; case 'c': - buff.shiftRight(1); - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnCommand(this, buff); - this->commandListFormat.erase(); - this->lastCommand = Jupiter::ReferenceString::empty; - this->lastCommandParams = Jupiter::ReferenceString::empty; - buff.shiftLeft(1); + { + Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnCommand(this, raw); + this->commandListFormat.erase(); + this->lastCommand = Jupiter::ReferenceString::empty; + this->lastCommandParams = Jupiter::ReferenceString::empty; + } break; case 'e': - buff.shiftRight(1); - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnError(this, buff); - buff.shiftLeft(1); - break; - - case 'v': - buff.shiftRight(1); - this->rconVersion = buff.asInt(10); - this->gameVersion = buff.substring(3); - - if (this->rconVersion >= 3) { - RenX::Server::sock.send("s\n"_jrs); - RenX::Server::send("serverinfo"_jrs); - RenX::Server::send("gameinfo"_jrs); - RenX::Server::send("mutatorlist"_jrs); - RenX::Server::send("rotation"_jrs); - RenX::Server::fetchClientList(); - RenX::Server::updateBuildingList(); - - RenX::Server::gameStart = std::chrono::steady_clock::now(); - this->seenStart = false; - this->seamless = true; - + Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnVersion(this, buff); - buff.shiftLeft(1); + xPlugins.get(i)->RenX_OnError(this, raw); } - else + break; + + case 'v': { - RenX::Server::sendLogChan(STRING_LITERAL_AS_REFERENCE(IRCCOLOR "04[Error]" IRCCOLOR " Disconnected from Renegade-X server (incompatible RCON version).")); - this->disconnect(RenX::DisconnectReason::IncompatibleVersion); + Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); + this->rconVersion = raw.asInt(10); + this->gameVersion = raw.substring(3); + + if (this->rconVersion >= 3) + { + RenX::Server::sock.send("s\n"_jrs); + RenX::Server::send("serverinfo"_jrs); + RenX::Server::send("gameinfo"_jrs); + RenX::Server::send("mutatorlist"_jrs); + RenX::Server::send("rotation"_jrs); + RenX::Server::fetchClientList(); + RenX::Server::updateBuildingList(); + + RenX::Server::gameStart = std::chrono::steady_clock::now(); + this->seenStart = false; + this->seamless = true; + + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnVersion(this, raw); + } + else + { + RenX::Server::sendLogChan(STRING_LITERAL_AS_REFERENCE(IRCCOLOR "04[Error]" IRCCOLOR " Disconnected from Renegade-X server (incompatible RCON version).")); + this->disconnect(RenX::DisconnectReason::IncompatibleVersion); + } } break; case 'a': - buff.shiftRight(1); - RenX::Server::rconUser = buff; - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnAuthorized(this, buff); - buff.shiftLeft(1); + { + RenX::Server::rconUser = Jupiter::ReferenceString::substring(line, 1);; + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnAuthorized(this, RenX::Server::rconUser); + } break; default: - buff.shiftRight(1); - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnOther(this, header, buff); - buff.shiftLeft(1); + { + Jupiter::ReferenceString raw = Jupiter::ReferenceString::substring(line, 1); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnOther(this, header, raw); + } break; } for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnRaw(this, buff); + xPlugins.get(i)->RenX_OnRaw(this, line); } }