323 lines
10 KiB
C
323 lines
10 KiB
C
#include <io.h>
|
|
|
|
#include "../mxm.h"
|
|
|
|
void mxmPcpCurrentFgprocess(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
char current[8];
|
|
sprintf_s(current, sizeof current, "%d", mxMaster->m_current);
|
|
pcpaSetSendPacket(stream, MXM_FG_CURRENT, current);
|
|
|
|
char* command = pcpaGetCommand(stream, MXM_FG_CURRENT);
|
|
if (command == NULL || strcmp(command, "?") != 0) pcpaAddSendPacket(stream, "code", "1");
|
|
}
|
|
|
|
void mxmPcpNextFgprocess(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
char next[8];
|
|
char workStr[256];
|
|
|
|
char* command = pcpaGetCommand(stream, pcpaGetKeyword(stream, 0));
|
|
char* path = pcpaGetCommand(stream, "path");
|
|
char* errormsg = pcpaGetCommand(stream, "errormsg");
|
|
char* size = pcpaGetCommand(stream, "size");
|
|
|
|
if (command == NULL) {
|
|
amiDebugLog("Error pcpaGetCommand");
|
|
pcpaSetSendPacket(stream, MXM_FG_NEXT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
char* endPtr;
|
|
long lCommand = strtol(command, &endPtr, 10);
|
|
if (endPtr == command) {
|
|
sprintf_s(next, sizeof next, "%d", mxMaster->m_next);
|
|
pcpaSetSendPacket(stream, MXM_FG_NEXT, next);
|
|
|
|
if (strcmp(command, "?") != 0) {
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
if (mxMaster->m_message[0] != '\0')
|
|
pcpaAddSendPacket(stream, "errormsg", mxMaster->m_message);
|
|
if (size == NULL) return;
|
|
|
|
unsigned long lSize = strtoul(size, &endPtr, 10);
|
|
if (endPtr == size) {
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
if (mxMaster->m_binaryMessageLen > lSize) {
|
|
pcpaAddSendPacket(stream, "code", "5");
|
|
return;
|
|
}
|
|
if (mxMaster->m_binaryMessageLen == 0) return;
|
|
|
|
_itoa_s(mxMaster->m_binaryMessageLen, workStr, sizeof workStr, 10);
|
|
pcpaAddSendPacket(stream, "size", workStr);
|
|
_itoa_s(mxMaster->m_dataPort, workStr, sizeof workStr, 10);
|
|
pcpaAddSendPacket(stream, "port", workStr);
|
|
|
|
pcpaSetBeforeBinaryModeCallBackFunc(stream, &mxmBeforeBinaryCallback, mxMaster);
|
|
pcpaSetAfterBinaryModeCallBackFunc(stream, &mxmAfterBinaryCallback, mxMaster);
|
|
pcpaSetBinaryMode(stream, binary_mode_send);
|
|
return;
|
|
}
|
|
|
|
if (lCommand >= 0 && lCommand <= 5) {
|
|
#ifdef MXM_APM2
|
|
lCommand = apmsTranslateNext(lCommand);
|
|
#endif
|
|
mxMaster->m_next = lCommand;
|
|
|
|
if (lCommand == appLauncherLaunchGame) {
|
|
if (path == NULL)
|
|
mxMaster->m_nextPath[0] = '\0';
|
|
else {
|
|
struct _finddata_t next_file;
|
|
intptr_t hFile = _findfirst(path, &next_file);
|
|
if (hFile == -1) {
|
|
amiDebugLog("Error : Process does not exist: %s", path);
|
|
mxMaster->m_next = 0;
|
|
|
|
pcpaSetSendPacket(stream, MXM_FG_NEXT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
sprintf_s(mxMaster->m_nextPath, sizeof mxMaster->m_nextPath, "%s", path);
|
|
}
|
|
}
|
|
|
|
sprintf_s(next, sizeof next, "%d", mxMaster->m_next);
|
|
pcpaSetSendPacket(stream, MXM_FG_NEXT, next);
|
|
|
|
if (lCommand != appLauncherLaunchSegabootR) return;
|
|
|
|
if (errormsg != NULL) {
|
|
if (!mxMaster->m_develop) {
|
|
if (mxMaster->m_message[0] == '\0') {
|
|
sprintf_s(mxMaster->m_message, sizeof mxMaster->m_message, "%s", errormsg);
|
|
} else {
|
|
amiDebugLog("Error : There is Already System message");
|
|
pcpaAddSendPacket(stream, "code", "4");
|
|
}
|
|
} else {
|
|
if (mxMaster->m_message[0] != '\0') {
|
|
ZeroMemory(mxMaster->m_message, sizeof mxMaster->m_message);
|
|
// amiDebugReportEvent(&eventSource, "mxmaster : System message was
|
|
// overwritten");
|
|
}
|
|
}
|
|
}
|
|
if (size == NULL) return;
|
|
|
|
if (!mxMaster->m_develop) {
|
|
if (mxMaster->m_binaryMessageLen != 0) {
|
|
amiDebugLog("Error : There is Already System message binnary\n");
|
|
pcpaAddSendPacket(stream, "code", "4");
|
|
return;
|
|
}
|
|
} else if (mxMaster->m_binaryMessageLen != 0) {
|
|
mxMaster->m_binaryMessageLen = 0;
|
|
ZeroMemory(mxMaster->m_binaryMessage, sizeof mxMaster->m_binaryMessage);
|
|
// amiDebugReportEvent(&eventSource, "mxmaster : System message binary was
|
|
// overwritten");
|
|
}
|
|
|
|
long recvLength = strtoul(size, &endPtr, 10);
|
|
if (endPtr == size) {
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
if (recvLength > sizeof mxMaster->m_binaryMessage) {
|
|
pcpaAddSendPacket(stream, "code", "5");
|
|
return;
|
|
}
|
|
|
|
pcpaAddSendPacket(stream, "size", size);
|
|
pcpaAddSendPacket(stream, "port", "40101");
|
|
pcpaSetRecvBinaryBuffer(stream, mxMaster->m_binaryMessage, recvLength);
|
|
mxMaster->m_binaryMessageLen = recvLength;
|
|
pcpaSetBinaryMode(stream, binary_mode_recv);
|
|
return;
|
|
}
|
|
|
|
pcpaSetSendPacket(stream, MXM_FG_NEXT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
}
|
|
|
|
void mxmPcpActiveFgprocess(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
char* command = pcpaGetCommand(stream, MXM_FG_ACTIVE);
|
|
if (command == NULL) {
|
|
amiDebugLog("Error pcpaGetCommand");
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
if (strcmp(command, "1") == 0) {
|
|
if (mxMaster->m_current != 0) {
|
|
amiDebugLog("Error : There is Already Active process");
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, "1");
|
|
pcpaAddSendPacket(stream, "code", "2");
|
|
return;
|
|
}
|
|
if (mxMaster->m_next != 0) {
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, "1");
|
|
mxMaster->m_current = mxMaster->m_next;
|
|
mxMaster->m_next = 0;
|
|
mxMaster->m_changeIsSpawn = 1;
|
|
mxMaster->m_processStateChange = true;
|
|
return;
|
|
}
|
|
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, "0");
|
|
pcpaAddSendPacket(stream, "code", "3");
|
|
return;
|
|
} else if (strcmp(command, "0") == 0) {
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, "0");
|
|
if (mxMaster->m_develop == 0) {
|
|
if (mxMaster->m_next != 0) {
|
|
mxMaster->m_current = mxMaster->m_next;
|
|
mxMaster->m_next = 0;
|
|
mxMaster->m_processStateChange = true;
|
|
return;
|
|
}
|
|
|
|
mxMaster->m_fault = 1;
|
|
mxMaster->m_current = 1;
|
|
mxMaster->m_processStateChange = true;
|
|
return;
|
|
}
|
|
|
|
mxMaster->m_next = 0;
|
|
mxMaster->m_current = 0;
|
|
mxMaster->m_processStateChange = true;
|
|
return;
|
|
} else {
|
|
pcpaSetSendPacket(stream, MXM_FG_ACTIVE, mxMaster->m_current == 0 ? "0" : "1");
|
|
if (strcmp(command, "?") != 0) pcpaAddSendPacket(stream, "code", "1");
|
|
}
|
|
}
|
|
|
|
void mxmPcpFaultFgprocess(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
pcpaSetSendPacket(stream, MXM_FG_FAULT, mxMaster->m_fault ? "1" : "0");
|
|
|
|
char* command = pcpaGetCommand(stream, MXM_FG_FAULT);
|
|
if (command == NULL) {
|
|
amiDebugLog("Error pcpaGetCommand");
|
|
pcpaSetSendPacket(stream, MXM_FG_FAULT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
if (strcmp(command, "?") != 0) pcpaAddSendPacket(stream, "code", "1");
|
|
}
|
|
|
|
void mxmPcpGetStartCount(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
char* command = pcpaGetCommand(stream, MXM_FG_GETCOUNT);
|
|
if (command == NULL) {
|
|
amiDebugLog("Error pcpaGetCommand");
|
|
pcpaSetSendPacket(stream, MXM_FG_GETCOUNT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
long lWhich = strtol(command, NULL, 10);
|
|
#ifdef MXM_APM2
|
|
lWhich = apmsTranslateNext(lWhich);
|
|
#endif
|
|
|
|
int count = 0;
|
|
bool valid = false;
|
|
switch (lWhich) {
|
|
case appLauncherLaunchSegabootR:
|
|
count = mxMaster->m_countSystemBoot;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchGame:
|
|
#ifdef MXM_APM2
|
|
case appLauncherLaunchAPM2:
|
|
#endif
|
|
count = mxMaster->m_countGameBoot;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchSegabootTR:
|
|
count = mxMaster->m_countSystemTest;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchGameTest:
|
|
count = mxMaster->m_countGameTest;
|
|
valid = true;
|
|
break;
|
|
default:
|
|
valid = false;
|
|
break;
|
|
}
|
|
|
|
pcpaSetSendPacket(stream, MXM_FG_GETCOUNT, command);
|
|
char workBuf[256];
|
|
if (valid) {
|
|
sprintf_s(workBuf, sizeof workBuf, "%d", count);
|
|
pcpaAddSendPacket(stream, "count", workBuf);
|
|
} else {
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
}
|
|
}
|
|
|
|
void mxmPcpSetStartCount(pcpa_t* stream, MX_MASTER* mxMaster) {
|
|
char* command = pcpaGetCommand(stream, MXM_FG_SETCOUNT);
|
|
char* sCount = pcpaGetCommand(stream, "count");
|
|
if (command == NULL) {
|
|
amiDebugLog("Error pcpaGetCommand");
|
|
pcpaSetSendPacket(stream, MXM_FG_SETCOUNT, "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
if (sCount == NULL) {
|
|
pcpaSetSendPacket(stream, MXM_FG_SETCOUNT, "?");
|
|
pcpaAddSendPacket(stream, "count", "?");
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
return;
|
|
}
|
|
|
|
long lWhich = strtol(command, NULL, 10);
|
|
#ifdef MXM_APM2
|
|
lWhich = apmsTranslateNext(lWhich);
|
|
#endif
|
|
long lCount = strtol(sCount, NULL, 10);
|
|
|
|
bool valid = false;
|
|
switch (lWhich) {
|
|
case appLauncherLaunchSegabootR:
|
|
mxMaster->m_countSystemBoot = lCount;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchGame:
|
|
#ifdef MXM_APM2
|
|
case appLauncherLaunchAPM2:
|
|
#endif
|
|
mxMaster->m_countGameBoot = lCount;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchSegabootTR:
|
|
mxMaster->m_countSystemTest = lCount;
|
|
valid = true;
|
|
break;
|
|
case appLauncherLaunchGameTest:
|
|
mxMaster->m_countGameTest = lCount;
|
|
valid = true;
|
|
break;
|
|
default:
|
|
valid = false;
|
|
break;
|
|
}
|
|
|
|
pcpaSetSendPacket(stream, MXM_FG_SETCOUNT, command);
|
|
if (valid)
|
|
pcpaAddSendPacket(stream, "count", sCount);
|
|
else
|
|
pcpaAddSendPacket(stream, "code", "1");
|
|
}
|