[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