aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/he
diff options
context:
space:
mode:
authorEugene Sandulenko2019-10-25 13:29:23 +0200
committerEugene Sandulenko2019-10-25 12:30:26 +0100
commitbedb0793a40c9ae640f422e52032764226e455bc (patch)
tree7fa595d3d7218f2ddb88bda0c6d0fb99f298ae10 /engines/scumm/he
parent2b70d695d09e5e29f1341700072285a549a00d57 (diff)
downloadscummvm-rg350-bedb0793a40c9ae640f422e52032764226e455bc.tar.gz
scummvm-rg350-bedb0793a40c9ae640f422e52032764226e455bc.tar.bz2
scummvm-rg350-bedb0793a40c9ae640f422e52032764226e455bc.zip
SCUMM HE: Switched packet manipulation to Stream code
Diffstat (limited to 'engines/scumm/he')
-rw-r--r--engines/scumm/he/moonbase/net_defines.h2
-rw-r--r--engines/scumm/he/moonbase/net_main.cpp48
2 files changed, 30 insertions, 20 deletions
diff --git a/engines/scumm/he/moonbase/net_defines.h b/engines/scumm/he/moonbase/net_defines.h
index 130ca1db94..fc4827fb60 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 4304fcdac4..acd11765f0 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);