[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