Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

124 lines
3.1 KiB
C++

#pragma warning (disable : 4786)
#include "stdafx.h"
#include "data server.hpp"
#include "data server.h"
#include <vector>
using namespace std;
CRITICAL_SECTION g_CritSection;
void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
{
return(malloc(len));
}
void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
{
free(ptr);
}
int StartRunID (void)
{
EnterCriticalSection (&g_CritSection);
int cur;
char string[255];
cur = -1;
do
{
cur++;
sprintf (string,"mw4run%d.data",cur);
} while (FileExists (string) );
HANDLE file;
file = NewFile (string);
CloseFile (file);
LeaveCriticalSection (&g_CritSection);
return cur;
}
void RecordData (int id,int version,double time,int type,int objectid,
float posx,float posy,float posz,
int int1,int int2,int int3,int int4,
float float1,float float2,float float3,float float4,
const unsigned char __RPC_FAR *str)
{
g_DataList[id].push_back (CDataEntry (id,version,type,time,objectid,posx,posy,posz,int1,int2,int3,int4,float1,float2,float3,float4,(const char *) str));
}
void FinishRun (int id)
{
HANDLE file;
char string[255];
std::map<int, std::vector<CDataEntry> >::iterator iter;
sprintf (string,"mw4run%d.data",id);
iter = g_DataList.find (id);
if (iter == g_DataList.end ())
{
DeleteFile (string);
return;
}
file = NewFile (string);
if (file == INVALID_HANDLE_VALUE)
return;
DumpData (file,g_DataList[id]);
CloseFile (file);
}
bool InitRPC (void)
{
InitializeCriticalSection (&g_CritSection);
RPC_STATUS status;
unsigned char * pszProtocolSequence1 = (unsigned char *) "ncacn_ip_tcp";
unsigned char * pszEndpoint1 = (unsigned char *) "1405";
unsigned char * pszProtocolSequence2 = (unsigned char *) "ncalrpc";
unsigned char * pszEndpoint2 = (unsigned char *) "MW4DataServer";
unsigned char * pszSecurity = (unsigned char *) NULL;
unsigned int cMinCalls = 1;
unsigned int cMaxCalls = 50;
unsigned int fDontWait = 1;
// status = RpcServerUseAllProtseqs (cMaxCalls,pszSecurity);
status = RpcServerUseProtseqEp(pszProtocolSequence1,cMaxCalls,pszEndpoint1,pszSecurity); // Security descriptor
if (status)
return false;
status = RpcServerUseProtseqEp(pszProtocolSequence2,cMaxCalls,pszEndpoint2,pszSecurity); // Security descriptor
if (status)
return false;
RPC_BINDING_VECTOR *inq;
status = RpcServerInqBindings (&inq);
status = RpcServerRegisterIf(MW4DataServer_ServerIfHandle, // interface to register
NULL, // MgrTypeUuid
NULL); // MgrEpv; null means use default
if (status)
return false;
status = RpcServerListen(cMinCalls,cMaxCalls,fDontWait);
if (status)
return false;
return true;
}
bool CloseRPC (void)
{
RPC_STATUS status;
status = RpcMgmtStopServerListening(NULL);
if (!status)
{
status = RpcServerUnregisterIf(NULL, NULL, FALSE);
}
DeleteCriticalSection (&g_CritSection);
return true;
}