aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2019-10-26 22:52:55 +0100
committerEugene Sandulenko2019-10-27 19:52:26 +0000
commitd3cdcf05c7ba8f7435ea04c55f752697be197679 (patch)
treef17b13b164eb51d4188d09cc9e194be93165dc87 /engines
parentd810bb7451ba5335a3f3ff7cb4b7b8ebd529b446 (diff)
downloadscummvm-rg350-d3cdcf05c7ba8f7435ea04c55f752697be197679.tar.gz
scummvm-rg350-d3cdcf05c7ba8f7435ea04c55f752697be197679.tar.bz2
scummvm-rg350-d3cdcf05c7ba8f7435ea04c55f752697be197679.zip
SCUMM HE: Read packets from the server
Diffstat (limited to 'engines')
-rw-r--r--engines/scumm/he/moonbase/net_defines.h2
-rw-r--r--engines/scumm/he/moonbase/net_main.cpp38
-rw-r--r--engines/scumm/he/moonbase/net_main.h4
3 files changed, 40 insertions, 4 deletions
diff --git a/engines/scumm/he/moonbase/net_defines.h b/engines/scumm/he/moonbase/net_defines.h
index 79d1651f58..2e466d69f2 100644
--- a/engines/scumm/he/moonbase/net_defines.h
+++ b/engines/scumm/he/moonbase/net_defines.h
@@ -59,7 +59,7 @@ const int MAX_HOSTNAME_SIZE = 256;
const int MAX_IP_SIZE = 32;
const char LOCAL_HOST[] = "127.0.0.1"; //localhost
-const int DATA_HEADER_SIZE = 24;
+const int DATA_HEADER_SIZE = 28;
#define NULL_IP ""; //no IP address (causes enumsessions to search local subnet)
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index bb371ff75b..42e475075d 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -340,6 +340,7 @@ int Net::remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data,
pack.writeUint32LE(_myUserId);
pack.writeUint32LE(typeOfSend);
pack.writeUint32LE(sendTypeParam);
+ pack.writeUint32LE(type);
pack.writeUint32LE(len);
pack.writeUint32LE(g_system->getMillis());
pack.write(data, len);
@@ -453,16 +454,32 @@ int Net::getMessageCount() {
}
void Net::remoteReceiveData() {
- // FIXME. Get data into _packbuffer
+ Networking::PostRequest rq(_serverprefix + "/getpacket",
+ new Common::Callback<Net, Common::JSONValue *>(this, &Net::remoteReceiveDataCallback),
+ new Common::Callback<Net, Networking::ErrorResponse>(this, &Net::remoteReceiveDataErrorCallback));
- int _packetsize = 0;
+ char *buf = (char *)malloc(MAX_PACKET_SIZE);
+ snprintf(buf, MAX_PACKET_SIZE, "{\"sessionid\":%d, \"userid\":%d}", _sessionid, _myUserId);
+ rq.setPostData((byte *)buf, strlen(buf));
+ rq.setContentType("application/json");
+
+ _packetsize = -1;
+ rq.start();
+
+ while(rq.state() == Networking::PROCESSING) {
+ g_system->delayMillis(5);
+ }
+
+ if (_packetsize == -1)
+ return;
Common::MemoryReadStream pack(_packbuffer, _packetsize);
pack.readUint32LE(); // sessionid
uint from = pack.readUint32LE();
- uint type = pack.readUint32LE(); // typeOfSend
+ pack.readUint32LE(); // typeOfSend
pack.readUint32LE(); // sendTypeParam
+ uint type = pack.readUint32LE();
uint len = pack.readUint32LE();
pack.readUint32LE(); // timestamp
@@ -529,6 +546,21 @@ void Net::remoteReceiveData() {
}
}
+void Net::remoteReceiveDataCallback(Common::JSONValue *response) {
+ debug(1, "remoteReceiveData: Got: '%s'", response->stringify().c_str());
+
+ if (!response->child("size")->asIntegerNumber())
+ return;
+
+ _packetsize = response->child("size")->asIntegerNumber();
+
+ strncpy((char *)_packbuffer, response->child("data")->asString().c_str(), _packetsize);
+}
+
+void Net::remoteReceiveDataErrorCallback(Networking::ErrorResponse error) {
+ warning("Error in remoteReceiveData(): %ld %s", error.httpResponseCode, error.response.c_str());
+}
+
void Net::unpackageArray(int arrayId, byte *data, int len) {
warning("STUB: unpackageArray");
}
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index 74fc021d82..0f6d547754 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -83,6 +83,9 @@ private:
void remoteSendDataCallback(Common::JSONValue *response);
void remoteSendDataErrorCallback(Networking::ErrorResponse error);
+ void remoteReceiveDataCallback(Common::JSONValue *response);
+ void remoteReceiveDataErrorCallback(Networking::ErrorResponse error);
+
public:
//getters
bool getHostName(char *hostname, int length);
@@ -102,6 +105,7 @@ public:
ScummEngine_v100he *_vm;
byte *_packbuffer;
+ int _packetsize;
byte *_tmpbuffer;
int _myUserId;