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

sev- sev at scummvm.org
Fri Oct 25 13:30:38 CEST 2019


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

Summary:
6c259f4fd0 SCUMM HE: Implemented startQuerySessions() for Moonbase Commander
a6273269f1 SCUMM HE: Implement getSessionPlayerCount() for Moonbase Commander
ccf6960aff SCUMM HE: Implement joinSession() for Moonbase Commander
2b70d695d0 SCUMM HE: Unstubbed smaller Moonbase Commander networking functions
bedb0793a4 SCUMM HE: Switched packet manipulation to Stream code


Commit: 6c259f4fd064007b83b1b41dacbcb5a9ca8c8ae0
    https://github.com/scummvm/scummvm/commit/6c259f4fd064007b83b1b41dacbcb5a9ca8c8ae0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-25T12:30:26+01:00

Commit Message:
SCUMM HE: Implemented startQuerySessions() for Moonbase Commander

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 764c028..f634c0c 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -37,6 +37,7 @@ Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm)
 	_lastResult = 0;
 
 	_sessionid = -1;
+	_sessions = nullptr;
 
 	_serverprefix = "http://localhost/moonbase";
 }
@@ -44,6 +45,8 @@ Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm)
 Net::~Net() {
 	free(_tmpbuffer);
 	free(_packbuffer);
+
+	delete _sessions;
 }
 
 int Net::hostGame(char *sessionName, char *userName) {
@@ -216,24 +219,32 @@ bool Net::destroyPlayer(int32 playerDPID) {
 }
 
 int32 Net::startQuerySessions() {
-	warning("STUB: Net::startQuerySessions()"); // StartQuerySessions
+	debug(1, "Net::startQuerySessions()"); // StartQuerySessions
 
 	Networking::PostRequest rq(_serverprefix + "/lobbies",
 		new Common::Callback<Net, Common::JSONValue *>(this, &Net::startQuerySessionsCallback),
 		new Common::Callback<Net, Networking::ErrorResponse>(this, &Net::startQuerySessionsErrorCallback));
 
+	delete _sessions;
+
 	rq.start();
 
 	while(rq.state() == Networking::PROCESSING) {
 		g_system->delayMillis(5);
 	}
 
-	// FAKE 1 session. FIXME
-	return 1;
+	if (!_sessions)
+		return 0;
+
+	debug(1, "Net::startQuerySessions(): got %lu", _sessions->countChildren());
+
+	return _sessions->countChildren();
 }
 
 void Net::startQuerySessionsCallback(Common::JSONValue *response) {
-	warning("startQuerySessions: Got: '%s'", response->stringify().c_str());
+	debug(1, "startQuerySessions: Got: '%s' which is %lu", response->stringify().c_str(), response->countChildren());
+
+	_sessions = new Common::JSONValue(*response);
 }
 
 void Net::startQuerySessionsErrorCallback(Networking::ErrorResponse error) {
@@ -344,8 +355,21 @@ bool Net::getIPfromName(char *ip, int ipLength, char *nameBuffer) {
 }
 
 void Net::getSessionName(int sessionNumber, char *buffer, int length) {
+	warning("STUB: Net::getSessionName(%d, ..., %d)", sessionNumber, length); // PN_GetSessionName
+
+	if (!_sessions) {
+		*buffer = '\0';
+		warning("Net::getSessionName(): no sessions");
+		return;
+	}
+
+	if (sessionNumber >= _sessions->countChildren()) {
+		*buffer = '\0';
+		warning("Net::getSessionName(): session number too big: %d >= %lu", sessionNumber, _sessions->countChildren());
+		return;
+	}
 	// FIXME
-	strcpy(buffer, "test");
+	strcpy(buffer, _sessions->child(sessionNumber)->child("name")->asString().c_str());
 
 	warning("STUB: Net::getSessionName(%d, \"%s\", %d)", sessionNumber, buffer, length); // PN_GetSessionName
 }
diff --git a/engines/scumm/he/moonbase/net_main.h b/engines/scumm/he/moonbase/net_main.h
index af71398..0298885 100644
--- a/engines/scumm/he/moonbase/net_main.h
+++ b/engines/scumm/he/moonbase/net_main.h
@@ -107,6 +107,8 @@ public:
 
 	int _sessionid;
 
+	Common::JSONValue *_sessions;
+
 	Common::String _serverprefix;
 };
 


Commit: a6273269f151b822c4bbeacd375682343e1f3013
    https://github.com/scummvm/scummvm/commit/a6273269f151b822c4bbeacd375682343e1f3013
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-25T12:30:26+01:00

Commit Message:
SCUMM HE: Implement getSessionPlayerCount() for Moonbase Commander

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


diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index f634c0c..96654c3 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -355,7 +355,7 @@ bool Net::getIPfromName(char *ip, int ipLength, char *nameBuffer) {
 }
 
 void Net::getSessionName(int sessionNumber, char *buffer, int length) {
-	warning("STUB: Net::getSessionName(%d, ..., %d)", sessionNumber, length); // PN_GetSessionName
+	debug(1, "Net::getSessionName(%d, ..., %d)", sessionNumber, length); // PN_GetSessionName
 
 	if (!_sessions) {
 		*buffer = '\0';
@@ -368,19 +368,29 @@ void Net::getSessionName(int sessionNumber, char *buffer, int length) {
 		warning("Net::getSessionName(): session number too big: %d >= %lu", sessionNumber, _sessions->countChildren());
 		return;
 	}
-	// FIXME
-	strcpy(buffer, _sessions->child(sessionNumber)->child("name")->asString().c_str());
 
-	warning("STUB: Net::getSessionName(%d, \"%s\", %d)", sessionNumber, buffer, length); // PN_GetSessionName
+	strlcpy(buffer, _sessions->child(sessionNumber)->child("name")->asString().c_str(), length);
 }
 
 int Net::getSessionPlayerCount(int sessionNumber) {
-	warning("STUB: Net::getSessionPlayerCount(%d)", sessionNumber); // case GET_SESSION_PLAYER_COUNT_KLUDGE:
-	//assert(sessionNumber >= 0 && sessionNumber < NUMELEMENTS(gdefMultiPlay.gamedescptr));
-	//return gdefMultiPlay.gamedescptr[sessionNumber].currentplayers;
+	debug(1, "Net::getSessionPlayerCount(%d)", sessionNumber); // case GET_SESSION_PLAYER_COUNT_KLUDGE:
 
-	// FAKE 2 players. FIXME
-	return 2;
+	if (!_sessions) {
+		warning("Net::getSessionName(): no sessions");
+		return 0;
+	}
+
+	if (sessionNumber >= _sessions->countChildren()) {
+		warning("Net::getSessionName(): session number too big: %d >= %lu", sessionNumber, _sessions->countChildren());
+		return 0;
+	}
+
+	if (!_sessions->child(sessionNumber)->hasChild("players")) {
+		warning("Net::getSessionName(): no players in session");
+		return 0;
+	}
+
+	return _sessions->child(sessionNumber)->child("players")->countChildren();
 }
 
 void Net::getProviderName(int providerIndex, char *buffer, int length) {


Commit: ccf6960aff98299aad72d43edb5bdc7cf9290859
    https://github.com/scummvm/scummvm/commit/ccf6960aff98299aad72d43edb5bdc7cf9290859
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-25T12:30:26+01:00

Commit Message:
SCUMM HE: Implement joinSession() for Moonbase Commander

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


diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index 96654c3..77d0e9c 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -166,9 +166,25 @@ void Net::createSessionErrorCallback(Networking::ErrorResponse error) {
 }
 
 int Net::joinSession(int sessionIndex) {
-	warning("STUB: Net::joinSession(%d)", sessionIndex); // PN_JoinSession
+	debug(1, "Net::joinSession(%d)", sessionIndex); // PN_JoinSession
+
+	if (!_sessions) {
+		warning("Net::joinSession(): no sessions");
+		return 0;
+	}
+
+	if (sessionIndex >= _sessions->countChildren()) {
+		warning("Net::joinSession(): session number too big: %d >= %lu", sessionIndex, _sessions->countChildren());
+		return 0;
+	}
+
+	if (!_sessions->child(sessionIndex)->hasChild("sessionid")) {
+		warning("Net::joinSession(): no sessionid in session");
+		return 0;
+	}
+
+	_sessionid = _sessions->child(sessionIndex)->child("sessionid")->asIntegerNumber();
 
-	// FAKE successful join. FIXME
 	return 1;
 }
 
@@ -376,17 +392,17 @@ int Net::getSessionPlayerCount(int sessionNumber) {
 	debug(1, "Net::getSessionPlayerCount(%d)", sessionNumber); // case GET_SESSION_PLAYER_COUNT_KLUDGE:
 
 	if (!_sessions) {
-		warning("Net::getSessionName(): no sessions");
+		warning("Net::getSessionPlayerCount(): no sessions");
 		return 0;
 	}
 
 	if (sessionNumber >= _sessions->countChildren()) {
-		warning("Net::getSessionName(): session number too big: %d >= %lu", sessionNumber, _sessions->countChildren());
+		warning("Net::getSessionPlayerCount(): session number too big: %d >= %lu", sessionNumber, _sessions->countChildren());
 		return 0;
 	}
 
 	if (!_sessions->child(sessionNumber)->hasChild("players")) {
-		warning("Net::getSessionName(): no players in session");
+		warning("Net::getSessionPlayerCount(): no players in session");
 		return 0;
 	}
 


Commit: 2b70d695d09e5e29f1341700072285a549a00d57
    https://github.com/scummvm/scummvm/commit/2b70d695d09e5e29f1341700072285a549a00d57
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-25T12:30:26+01:00

Commit Message:
SCUMM HE: Unstubbed smaller Moonbase Commander networking functions

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


diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index 77d0e9c..4304fcd 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -122,7 +122,8 @@ int Net::whoSentThis() {
 }
 
 int Net::whoAmI() {
-	warning("STUB: Net::whoAmI()"); // PN_WhoAmI
+	debug(1, "Net::whoAmI()"); // PN_WhoAmI
+
 	return _myUserId;
 }
 
@@ -273,7 +274,9 @@ int32 Net::updateQuerySessions() {
 }
 
 void Net::stopQuerySessions() {
-	warning("STUB: Net::stopQuerySessions()"); // StopQuerySessions
+	debug(1, "Net::stopQuerySessions()"); // StopQuerySessions
+
+	// No op
 }
 
 int Net::querySessions() {
@@ -294,8 +297,9 @@ int Net::setProvider(int providerIndex) {
 }
 
 int Net::closeProvider() {
-	warning("STUB: Net::closeProvider()"); // PN_CloseProvider
-	return 0;
+	debug(1, "Net::closeProvider()"); // PN_CloseProvider
+
+	return 1;
 }
 
 bool Net::initAll() {


Commit: bedb0793a40c9ae640f422e52032764226e455bc
    https://github.com/scummvm/scummvm/commit/bedb0793a40c9ae640f422e52032764226e455bc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-25T12:30:26+01:00

Commit Message:
SCUMM HE: Switched packet manipulation to Stream code

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


diff --git a/engines/scumm/he/moonbase/net_defines.h b/engines/scumm/he/moonbase/net_defines.h
index 130ca1d..fc4827f 100644
--- a/engines/scumm/he/moonbase/net_defines.h
+++ b/engines/scumm/he/moonbase/net_defines.h
@@ -59,6 +59,8 @@ 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 = 16;
+
 #define NULL_IP "";						//no IP address (causes enumsessions to search local subnet)
 
 } // End of namespace Scumm
diff --git a/engines/scumm/he/moonbase/net_main.cpp b/engines/scumm/he/moonbase/net_main.cpp
index 4304fcd..acd1176 100644
--- a/engines/scumm/he/moonbase/net_main.cpp
+++ b/engines/scumm/he/moonbase/net_main.cpp
@@ -30,7 +30,7 @@ namespace Scumm {
 Net::Net(ScummEngine_v100he *vm) : _latencyTime(1), _fakeLatency(false), _vm(vm) {
 	//some defaults for fields
 
-	_packbuffer = (byte *)malloc(MAX_PACKET_SIZE + 12);
+	_packbuffer = (byte *)malloc(MAX_PACKET_SIZE + DATA_HEADER_SIZE);
 	_tmpbuffer = (byte *)malloc(MAX_PACKET_SIZE);
 
 	_myUserId = -1;
@@ -333,14 +333,19 @@ void Net::remoteStartScript(int typeOfSend, int sendTypeParam, int priority, int
 }
 
 int Net::remoteSendData(int typeOfSend, int sendTypeParam, int type, byte *data, int len, int defaultRes) {
-	WRITE_UINT32(_packbuffer, type);
-	WRITE_UINT32(_packbuffer + 4, len);
-	WRITE_UINT32(_packbuffer + 8, g_system->getMillis());
-	memcpy(_packbuffer + 12, data, len);
+	Common::MemoryWriteStream pack(_packbuffer, MAX_PACKET_SIZE + DATA_HEADER_SIZE);
 
-	debug("Package to send, to: %d (%d), %d bytes", typeOfSend, sendTypeParam, len + 12);
+	pack.writeUint32LE(_sessionid);
+	pack.writeUint32LE(_myUserId);
+	pack.writeUint32LE(typeOfSend);
+	pack.writeUint32LE(sendTypeParam);
+	pack.writeUint32LE(len);
+	pack.writeUint32LE(g_system->getMillis());
+	pack.write(data, len);
 
-	Common::hexdump(_packbuffer, len + 12);
+	debug("Package to send, to: %d (%d), %d bytes", typeOfSend, sendTypeParam, len + DATA_HEADER_SIZE);
+
+	Common::hexdump(_packbuffer, len + DATA_HEADER_SIZE);
 
 	return defaultRes;
 }
@@ -423,22 +428,28 @@ int Net::getMessageCount() {
 
 void Net::remoteReceiveData() {
 	// FIXME. Get data into _packbuffer
-	uint type = READ_UINT32(_packbuffer);
-	uint len = READ_UINT32(_packbuffer + 4);
-	/*uint timestamp =*/ READ_UINT32(_packbuffer + 8);
-	byte *p;
+
+	int _packetsize = 0;
+
+	Common::MemoryReadStream pack(_packbuffer, _packetsize);
+
+	pack.readUint32LE(); // sessionid
+	uint from = pack.readUint32LE();
+	uint type = pack.readUint32LE(); // typeOfSend
+	pack.readUint32LE(); // sendTypeParam
+	uint len = pack.readUint32LE();
+	pack.readUint32LE(); // timestamp
+
 	uint32 *params;
 
 	switch (type) {
 	case PACKETTYPE_REMOTESTARTSCRIPT:
 		{
-			p = _packbuffer + 12;
 			params = (uint32 *)_tmpbuffer;
 
 			for (int i = 0; i < 24; i++) {
-				*params = READ_UINT32(p);
+				*params = pack.readUint32LE();
 				params++;
-				p += 4;
 			}
 
 			_vm->runScript(_vm->VAR(_vm->VAR_REMOTE_START_SCRIPT), 1, 0, (int *)_tmpbuffer);
@@ -447,13 +458,11 @@ void Net::remoteReceiveData() {
 
 	case PACKETTYPE_REMOTESTARTSCRIPTRETURN:
 		{
-			p = _packbuffer + 12;
 			params = (uint32 *)_tmpbuffer;
 
 			for (int i = 0; i < 24; i++) {
-				*params = READ_UINT32(p);
+				*params = pack.readUint32LE();
 				params++;
-				p += 4;
 			}
 
 			_vm->runScript(_vm->VAR(_vm->VAR_REMOTE_START_SCRIPT), 1, 0, (int *)_tmpbuffer);
@@ -461,8 +470,7 @@ void Net::remoteReceiveData() {
 
 			WRITE_UINT32(_tmpbuffer, res);
 
-			// FIXME
-			remoteSendData(PN_SENDTYPE_INDIVIDUAL, 0 /* gdefMultiPlay.from */, PACKETTYPE_REMOTESTARTSCRIPTRESULT, _tmpbuffer, 4, 0);
+			remoteSendData(PN_SENDTYPE_INDIVIDUAL, from, PACKETTYPE_REMOTESTARTSCRIPTRESULT, _tmpbuffer, 4, 0);
 		}
 		break;
 
@@ -481,7 +489,7 @@ void Net::remoteReceiveData() {
 			// and unpack it into an scumm array :-)
 
 			newArray = _vm->findFreeArrayId();
-			unpackageArray(newArray, _packbuffer + 12, len);
+			unpackageArray(newArray, _packbuffer + DATA_HEADER_SIZE, len);
 			memset(_tmpbuffer, 0, 25 * 4);
 			WRITE_UINT32(_tmpbuffer, newArray);
 





More information about the Scummvm-git-logs mailing list