Changeset - r25575:634f384ae528
[Not reviewed]
master
0 5 0
rubidium42 - 3 years ago 2021-05-14 15:33:29
rubidium@openttd.org
Codechange: [Network] Let admin-game script use std::string
5 files changed with 15 insertions and 22 deletions:
0 comments (0 inline, 0 general)
src/network/network_admin.cpp
Show inline comments
 
@@ -511,17 +511,15 @@ NetworkRecvStatus ServerNetworkAdminSock
 
}
 

	
 
NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_GAMESCRIPT(Packet *p)
 
{
 
	if (this->status == ADMIN_STATUS_INACTIVE) return this->SendError(NETWORK_ERROR_NOT_EXPECTED);
 

	
 
	char json[NETWORK_GAMESCRIPT_JSON_LENGTH];
 
	std::string json = p->Recv_string(NETWORK_GAMESCRIPT_JSON_LENGTH);
 

	
 
	p->Recv_string(json, sizeof(json));
 

	
 
	DEBUG(net, 6, "[admin] GameScript JSON from '%s' (%s): %s", this->admin_name.c_str(), this->admin_version.c_str(), json);
 
	DEBUG(net, 6, "[admin] GameScript JSON from '%s' (%s): %s", this->admin_name.c_str(), this->admin_version.c_str(), json.c_str());
 

	
 
	Game::NewEvent(new ScriptEventAdminPort(json));
 
	return NETWORK_RECV_STATUS_OKAY;
 
}
 

	
 
NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_PING(Packet *p)
 
@@ -558,18 +556,18 @@ NetworkRecvStatus ServerNetworkAdminSock
 
}
 

	
 
/**
 
 * Send GameScript JSON output.
 
 * @param json The JSON string.
 
 */
 
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendGameScript(const char *json)
 
NetworkRecvStatus ServerNetworkAdminSocketHandler::SendGameScript(const std::string_view json)
 
{
 
	/* At the moment we cannot transmit anything larger than MTU. So we limit
 
	 *  the maximum amount of json data that can be sent. Account also for
 
	 *  the trailing \0 of the string */
 
	if (strlen(json) + 1 >= NETWORK_GAMESCRIPT_JSON_LENGTH) return NETWORK_RECV_STATUS_OKAY;
 
	if (json.size() + 1 >= NETWORK_GAMESCRIPT_JSON_LENGTH) return NETWORK_RECV_STATUS_OKAY;
 

	
 
	Packet *p = new Packet(ADMIN_PACKET_SERVER_GAMESCRIPT);
 

	
 
	p->Send_string(json);
 
	this->SendPacket(p);
 

	
 
@@ -938,13 +936,13 @@ void NetworkAdminConsole(const char *ori
 
}
 

	
 
/**
 
 * Send GameScript JSON to the admin network (if they did opt in for the respective update).
 
 * @param json The JSON data as received from the GameScript.
 
 */
 
void NetworkAdminGameScript(const char *json)
 
void NetworkAdminGameScript(const std::string_view json)
 
{
 
	for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) {
 
		if (as->update_frequency[ADMIN_UPDATE_GAMESCRIPT] & ADMIN_FREQUENCY_AUTOMATIC) {
 
			as->SendGameScript(json);
 
		}
 
	}
src/network/network_admin.h
Show inline comments
 
@@ -61,13 +61,13 @@ public:
 
	NetworkRecvStatus SendCompanyEconomy();
 
	NetworkRecvStatus SendCompanyStats();
 

	
 
	NetworkRecvStatus SendChat(NetworkAction action, DestType desttype, ClientID client_id, const std::string &msg, int64 data);
 
	NetworkRecvStatus SendRcon(uint16 colour, const char *command);
 
	NetworkRecvStatus SendConsole(const char *origin, const char *command);
 
	NetworkRecvStatus SendGameScript(const char *json);
 
	NetworkRecvStatus SendGameScript(const std::string_view json);
 
	NetworkRecvStatus SendCmdNames();
 
	NetworkRecvStatus SendCmdLogging(ClientID client_id, const CommandPacket *cp);
 
	NetworkRecvStatus SendRconEnd(const char *command);
 

	
 
	static void Send();
 
	static void AcceptConnection(SOCKET s, const NetworkAddress &address);
 
@@ -107,10 +107,10 @@ void NetworkAdminCompanyUpdate(const Com
 
void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr);
 

	
 
void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_id, const std::string &msg, int64 data = 0, bool from_admin = false);
 
void NetworkAdminUpdate(AdminUpdateFrequency freq);
 
void NetworkServerSendAdminRcon(AdminIndex admin_index, TextColour colour_code, const char *string);
 
void NetworkAdminConsole(const char *origin, const char *string);
 
void NetworkAdminGameScript(const char *json);
 
void NetworkAdminGameScript(const std::string_view json);
 
void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacket *cp);
 

	
 
#endif /* NETWORK_ADMIN_H */
src/script/api/script_admin.cpp
Show inline comments
 
@@ -136,11 +136,11 @@
 
	if (json.length() > NETWORK_GAMESCRIPT_JSON_LENGTH) {
 
		ScriptLog::Error("You are trying to send a table that is too large to the AdminPort. No data sent.");
 
		sq_pushinteger(vm, 0);
 
		return 1;
 
	}
 

	
 
	NetworkAdminGameScript(json.c_str());
 
	NetworkAdminGameScript(json);
 

	
 
	sq_pushinteger(vm, 1);
 
	return 1;
 
}
src/script/api/script_event_types.cpp
Show inline comments
 
@@ -115,29 +115,24 @@ bool ScriptEventEnginePreview::AcceptPre
 

	
 
bool ScriptEventCompanyAskMerger::AcceptMerger()
 
{
 
	return ScriptObject::DoCommand(0, this->owner, 0, CMD_BUY_COMPANY);
 
}
 

	
 
ScriptEventAdminPort::ScriptEventAdminPort(const char *json) :
 
ScriptEventAdminPort::ScriptEventAdminPort(const std::string &json) :
 
		ScriptEvent(ET_ADMIN_PORT),
 
		json(stredup(json))
 
		json(json)
 
{
 
}
 

	
 
ScriptEventAdminPort::~ScriptEventAdminPort()
 
{
 
	free(this->json);
 
}
 

	
 
#define SKIP_EMPTY(p) while (*(p) == ' ' || *(p) == '\n' || *(p) == '\r') (p)++;
 
#define RETURN_ERROR(stack) { ScriptLog::Error("Received invalid JSON data from AdminPort."); if (stack != 0) sq_pop(vm, stack); return nullptr; }
 

	
 
SQInteger ScriptEventAdminPort::GetObject(HSQUIRRELVM vm)
 
{
 
	const char *p = this->json;
 
	const char *p = this->json.c_str();
 

	
 
	if (this->ReadTable(vm, p) == nullptr) {
 
		sq_pushnull(vm);
 
		return 1;
 
	}
 

	
 
@@ -165,13 +160,14 @@ const char *ScriptEventAdminPort::ReadSt
 
		if (*p == '"') break;
 
		if (*p == '\0') RETURN_ERROR(0);
 

	
 
		p++;
 
	}
 

	
 
	sq_pushstring(vm, value, p - value);
 
	size_t len = p - value;
 
	sq_pushstring(vm, value, len);
 
	p++; // Step past the end-of-string marker (")
 

	
 
	return p;
 
}
 

	
 
const char *ScriptEventAdminPort::ReadTable(HSQUIRRELVM vm, const char *p)
src/script/api/script_event_types.hpp
Show inline comments
 
@@ -834,14 +834,13 @@ private:
 
 */
 
class ScriptEventAdminPort : public ScriptEvent {
 
public:
 
	/**
 
	 * @param json The JSON string which got sent.
 
	 */
 
	ScriptEventAdminPort(const char *json);
 
	~ScriptEventAdminPort();
 
	ScriptEventAdminPort(const std::string &json);
 

	
 
	/**
 
	 * Convert an ScriptEvent to the real instance.
 
	 * @param instance The instance to convert.
 
	 * @return The converted instance.
 
	 */
 
@@ -850,13 +849,13 @@ public:
 
	/**
 
	 * Get the information that was sent to you back as Squirrel object.
 
	 */
 
	SQInteger GetObject(HSQUIRRELVM vm);
 

	
 
private:
 
	char *json; ///< The JSON string.
 
	std::string json; ///< The JSON string.
 

	
 
	/**
 
	 * Read a table from a JSON string.
 
	 * @param vm The VM used.
 
	 * @param p The (part of the) JSON string reading.
 
	 */
0 comments (0 inline, 0 general)