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

sev- sev at scummvm.org
Sun Oct 27 20:52:42 CET 2019


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

Summary:
d3cdcf05c7 SCUMM HE: Read packets from the server
e6d9148061 SCUMM HE: Moonbase Commander: simplify looping over network packets


Commit: d3cdcf05c7ba8f7435ea04c55f752697be197679
    https://github.com/scummvm/scummvm/commit/d3cdcf05c7ba8f7435ea04c55f752697be197679
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-27T19:52:26Z

Commit Message:
SCUMM HE: Read packets from the server

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


diff --git a/engines/scumm/he/moonbase/net_defines.h b/engines/scumm/he/moonbase/net_defines.h
index 79d1651..2e466d6 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 bb371ff..42e4750 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 74fc021..0f6d547 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;


Commit: e6d9148061cb863e642ab4b5ce129ee429864adb
    https://github.com/scummvm/scummvm/commit/e6d9148061cb863e642ab4b5ce129ee429864adb
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-27T19:52:26Z

Commit Message:
SCUMM HE: Moonbase Commander: simplify looping over network packets

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 42e4750..cd25a22 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -449,11 +449,7 @@ void Net::getProviderName(int providerIndex, char *buffer, int length) {
 	warning("STUB: Net::getProviderName(%d, \"%s\", %d)", providerIndex, buffer, length); // PN_GetProviderName
 }
 
-int Net::getMessageCount() {
-	return 0; // FIXME
-}
-
-void Net::remoteReceiveData() {
+bool Net::remoteReceiveData() {
 	Networking::PostRequest rq(_serverprefix + "/getpacket",
 		new Common::Callback<Net, Common::JSONValue *>(this, &Net::remoteReceiveDataCallback),
 		new Common::Callback<Net, Networking::ErrorResponse>(this, &Net::remoteReceiveDataErrorCallback));
@@ -470,8 +466,8 @@ void Net::remoteReceiveData() {
 		g_system->delayMillis(5);
 	}
 
-	if (_packetsize == -1)
-		return;
+	if (!_packetsize)
+		return false;
 
 	Common::MemoryReadStream pack(_packbuffer, _packetsize);
 
@@ -544,16 +540,18 @@ void Net::remoteReceiveData() {
 	default:
 		warning("Moonbase: Received unknown network command %d", type);
 	}
+
+	return true;
 }
 
 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();
 
+	if (!_packetsize)
+		return;
+
 	strncpy((char *)_packbuffer, response->child("data")->asString().c_str(), _packetsize);
 }
 
@@ -569,9 +567,7 @@ void Net::unpackageArray(int arrayId, byte *data, int len) {
 void Net::doNetworkOnceAFrame(int msecs) {
 	uint32 tickCount = g_system->getMillis() + msecs;
 
-	while (getMessageCount()) {
-		remoteReceiveData();
-
+	while (remoteReceiveData()) {
 		if (tickCount >= g_system->getMillis()) {
 			break;
 		}
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index 0f6d547..3c3acde 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -68,8 +68,7 @@ public:
 	void unpackageArray(int arrayId, byte *data, int len);
 
 private:
-	int getMessageCount();
-	void remoteReceiveData();
+	bool remoteReceiveData();
 
 	void createSessionCallback(Common::JSONValue *response);
 	void createSessionErrorCallback(Networking::ErrorResponse error);





More information about the Scummvm-git-logs mailing list