From 5f38e3fa11b1b0a6da7992d9b55f37950754de4d Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 24 May 2015 19:24:17 -0400 Subject: [PATCH] RenX::Server: * Added "serverinfo" command parsing * Moved HostChat logging from command-interpretation to "HostSay;" CHAT log. * "serverinfo" is now sent instead of "map" * Hostname is now copied from the socket in the socket move constructor --- Release/Plugins/RenX.Core.lib | Bin 120750 -> 120750 bytes RenX.Core/RenX_Server.cpp | 26 ++++++++++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index f54cf03d5e42346c4740cc6a69df66c35122af17..27bdda845ccae1c3bf63524214c953535b5c5425 100644 GIT binary patch delta 7675 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 TblastCommand.equalsi("map")) this->map = buff.substring(1); + else if (this->lastCommand.equalsi("serverinfo")) + { + // "Port" | Port | "Name" | Name | "Passworded" | "True"/"False" | "Level" | Level + buff.shiftRight(1); + this->port = static_cast(buff.getToken(1, RenX::DelimC).asUnsignedInt(10)); + this->serverName = buff.getToken(3, RenX::DelimC); + this->map = buff.getToken(7, RenX::DelimC); + buff.shiftLeft(1); + } else if (this->lastCommand.equalsi("changename")) { buff.shiftRight(1); @@ -1759,6 +1768,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) xPlugins.get(i)->RenX_OnTeamChat(this, player, message); onAction(); } + else if (subHeader.equals("HostSay;")) + { + Jupiter::ReferenceString message = buff.getToken(3, RenX::DelimC); + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnHostChat(this, message); + } /*else if (subHeader.equals("AdminSay;")) { // Player | "said:" | Message @@ -1862,13 +1877,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { Jupiter::ReferenceString command = buff.gotoToken(4, RenX::DelimC); Jupiter::ReferenceString cmd = command.getWord(0, " "); - if (cmd.equalsi("hostsay")) - { - Jupiter::ReferenceString message = command.gotoWord(1, " "); - for (size_t i = 0; i < xPlugins.size(); i++) - xPlugins.get(i)->RenX_OnHostChat(this, message); - } - else if (cmd.equalsi("hostprivatesay")) + if (cmd.equalsi("hostprivatesay")) { RenX::PlayerInfo *player = this->getPlayerByName(command.getWord(1, " ")); if (player != nullptr) @@ -2227,7 +2236,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) if (this->rconVersion >= 3) { RenX::Server::sock.send(STRING_LITERAL_AS_REFERENCE("s\n")); - RenX::Server::send(STRING_LITERAL_AS_REFERENCE("map")); + RenX::Server::send(STRING_LITERAL_AS_REFERENCE("serverinfo")); RenX::Server::fetchClientList(); this->firstGame = true; @@ -2323,6 +2332,7 @@ const Jupiter::ReadableString &RenX::Server::getRCONUsername() const RenX::Server::Server(Jupiter::Socket &&socket, const Jupiter::ReadableString &configurationSection) : Server(configurationSection) { RenX::Server::sock = std::move(socket); + RenX::Server::hostname = RenX::Server::sock.getHostname(); RenX::Server::sock.send(Jupiter::StringS::Format("a%.*s\n", RenX::Server::pass.size(), RenX::Server::pass.ptr())); RenX::Server::connected = true; RenX::Server::silenceParts = false;