[Scummvm-git-logs] scummvm master -> f55a22e127a4cffd49545c7ac5c00597b4f310a6

sev- sev at scummvm.org
Mon Oct 28 11:45:56 CET 2019


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
f55a22e127 SCUMM HE: MBC: Read Json packet data


Commit: f55a22e127a4cffd49545c7ac5c00597b4f310a6
    https://github.com/scummvm/scummvm/commit/f55a22e127a4cffd49545c7ac5c00597b4f310a6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-28T10:45:42Z

Commit Message:
SCUMM HE: MBC: Read Json packet data

Changed paths:
    engines/scumm/he/moonbase/net_main.cpp
    engines/scumm/he/moonbase/net_main.h


diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index ae143ee..9091842 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -38,6 +38,7 @@ Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm)
 
 	_sessionid = -1;
 	_sessions = nullptr;
+	_packetdata = nullptr;
 
 	_serverprefix = "http://localhost/moonbase";
 }
@@ -345,13 +346,16 @@ int Net::remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data,
 
 	res += Common::String::format("%d] }", data[len - 1]);
 
+	byte *buf = (byte *)malloc(res.size() + 1);
+	strncpy((char *)buf, res.c_str(), res.size());
+
 	debug("Package to send: %s", res.c_str());
 
 	Networking::PostRequest rq(_serverprefix + "/packet",
 		new Common::Callback<Net, Common::JSONValue *>(this, &Net::remoteSendDataCallback),
 		new Common::Callback<Net, Networking::ErrorResponse>(this, &Net::remoteSendDataErrorCallback));
 
-	rq.setPostData((byte *)res.c_str(), res.size());
+	rq.setPostData(buf, res.size());
 	rq.setContentType("application/json");
 
 	rq.start();
@@ -454,29 +458,31 @@ bool Net::remoteReceiveData() {
 		new Common::Callback<Net, Networking::ErrorResponse>(this, &Net::remoteReceiveDataErrorCallback));
 
 	char *buf = (char *)malloc(MAX_PACKET_SIZE);
-	snprintf(buf, MAX_PACKET_SIZE, "{\"sessionid\":%d, \"userid\":%d}", _sessionid, _myUserId);
+	snprintf(buf, MAX_PACKET_SIZE, "{\"sessionid\":%d, \"playerid\":%d}", _sessionid, _myUserId);
 	rq.setPostData((byte *)buf, strlen(buf));
 	rq.setContentType("application/json");
 
-	_packetsize = -1;
+	delete _packetdata;
+	_packetdata = nullptr;
+
 	rq.start();
 
 	while(rq.state() == Networking::PROCESSING) {
 		g_system->delayMillis(5);
 	}
 
-	if (!_packetsize)
+	if (!_packetdata)
 		return false;
 
-	Common::MemoryReadStream pack(_packbuffer, _packetsize);
+	uint from = _packetdata->child("from")->asIntegerNumber();
+	uint type = _packetdata->child("type")->asIntegerNumber();
 
-	pack.readUint32LE(); // sessionid
-	uint from = pack.readUint32LE();
-	pack.readUint32LE(); // typeOfSend
-	pack.readUint32LE(); // sendTypeParam
-	uint type = pack.readUint32LE();
-	uint len = pack.readUint32LE();
-	pack.readUint32LE(); // timestamp
+	int datalen = _packetdata->child("data")->asArray().size();
+	for (uint i = 0; i < datalen; i++) {
+		_packbuffer[i] = _packetdata->child("data")->asArray()[i]->asIntegerNumber();
+	}
+
+	Common::MemoryReadStream pack(_packbuffer, datalen);
 
 	uint32 *params;
 
@@ -527,7 +533,7 @@ bool Net::remoteReceiveData() {
 			// and unpack it into an scumm array :-)
 
 			newArray = _vm->findFreeArrayId();
-			unpackageArray(newArray, _packbuffer + DATA_HEADER_SIZE, len);
+			unpackageArray(newArray, _packbuffer + DATA_HEADER_SIZE, datalen);
 			memset(_tmpbuffer, 0, 25 * 4);
 			WRITE_UINT32(_tmpbuffer, newArray);
 
@@ -546,17 +552,7 @@ bool Net::remoteReceiveData() {
 void Net::remoteReceiveDataCallback(Common::JSONValue *response) {
 	debug(1, "remoteReceiveData: Got: '%s'", response->stringify().c_str());
 
-	if (!response->hasChild("size")) {
-		warning("Net::remoteReceiveDataCallback(): invalid response");
-		return;
-	}
-
-	_packetsize = response->child("size")->asIntegerNumber();
-
-	if (!_packetsize)
-		return;
-
-	strncpy((char *)_packbuffer, response->child("data")->asString().c_str(), _packetsize);
+	_packetdata = new Common::JSONValue(*response);
 }
 
 void Net::remoteReceiveDataErrorCallback(Networking::ErrorResponse error) {
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index 3c3acde..50b085e 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -114,6 +114,7 @@ public:
 	int _sessionid;
 
 	Common::JSONValue *_sessions;
+	Common::JSONValue *_packetdata;
 
 	Common::String _serverprefix;
 };





More information about the Scummvm-git-logs mailing list