This commit is contained in:
Eric House 2024-11-11 07:14:54 -08:00
parent c5730c4ff0
commit f5888befb8
9 changed files with 44 additions and 48 deletions

View file

@ -159,10 +159,10 @@ static void clearCurHintRect( BoardCtxt* board );
* *
****************************************************************************/ ****************************************************************************/
BoardCtxt* BoardCtxt*
board_make( MPFORMAL XWEnv xwe, ModelCtxt* model, ServerCtxt* server, board_make( XWEnv xwe, ModelCtxt* model, ServerCtxt* server,
DrawCtx* draw, XW_UtilCtxt* util ) DrawCtx* draw, XW_UtilCtxt* util )
{ {
BoardCtxt* result = (BoardCtxt*)XP_MALLOC( mpool, sizeof( *result ) ); BoardCtxt* result = (BoardCtxt*)XP_MALLOC( util->mpool, sizeof( *result ) );
XP_ASSERT( !!server ); XP_ASSERT( !!server );
XP_ASSERT( !!util ); XP_ASSERT( !!util );
XP_ASSERT( !!model ); XP_ASSERT( !!model );
@ -172,7 +172,7 @@ board_make( MPFORMAL XWEnv xwe, ModelCtxt* model, ServerCtxt* server,
XP_MEMSET( result, 0, sizeof( *result ) ); XP_MEMSET( result, 0, sizeof( *result ) );
result->selInfo = result->pti; /* equates to selPlayer == 0 */ result->selInfo = result->pti; /* equates to selPlayer == 0 */
MPASSIGN(result->mpool, mpool); MPASSIGN(result->mpool, util->mpool);
result->model = model; result->model = model;
result->server = server; result->server = server;
@ -214,7 +214,7 @@ board_destroy( BoardCtxt* board, XWEnv xwe, XP_Bool ownsUtil )
} /* board_destroy */ } /* board_destroy */
BoardCtxt* BoardCtxt*
board_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* model, board_makeFromStream( XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* model,
ServerCtxt* server, DrawCtx* draw, XW_UtilCtxt* util, ServerCtxt* server, DrawCtx* draw, XW_UtilCtxt* util,
XP_U16 nPlayers ) XP_U16 nPlayers )
{ {
@ -227,7 +227,7 @@ board_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* model
nColsNBits = NUMCOLS_NBITS_4; nColsNBits = NUMCOLS_NBITS_4;
#endif #endif
board = board_make( MPPARM(mpool) xwe, model, server, draw, util ); board = board_make( xwe, model, server, draw, util );
board_setCallbacks( board, xwe ); board_setCallbacks( board, xwe );
if ( version >= STREAM_VERS_4YOFFSET) { if ( version >= STREAM_VERS_4YOFFSET) {
@ -415,8 +415,7 @@ void
board_drawSnapshot( const BoardCtxt* curBoard, XWEnv xwe, DrawCtx* dctx, board_drawSnapshot( const BoardCtxt* curBoard, XWEnv xwe, DrawCtx* dctx,
XP_U16 width, XP_U16 height ) XP_U16 width, XP_U16 height )
{ {
BoardCtxt* newBoard = board_make( MPPARM(curBoard->mpool) xwe, BoardCtxt* newBoard = board_make( xwe, curBoard->model,
curBoard->model,
curBoard->server, dctx, curBoard->util ); curBoard->server, dctx, curBoard->util );
board_setDraw( newBoard, xwe, dctx ); /* so draw_dictChanged() will get called */ board_setDraw( newBoard, xwe, dctx ); /* so draw_dictChanged() will get called */
XP_U16 fontWidth = width / curBoard->gi->boardSize; XP_U16 fontWidth = width / curBoard->gi->boardSize;

View file

@ -56,9 +56,9 @@ typedef enum {
/* typedef struct BoardCtxt BoardCtxt; */ /* typedef struct BoardCtxt BoardCtxt; */
BoardCtxt* board_make( MPFORMAL XWEnv xwe, ModelCtxt* model, ServerCtxt* server, BoardCtxt* board_make( XWEnv xwe, ModelCtxt* model, ServerCtxt* server,
DrawCtx* draw, XW_UtilCtxt* util ); DrawCtx* draw, XW_UtilCtxt* util );
BoardCtxt* board_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, BoardCtxt* board_makeFromStream( XWEnv xwe, XWStreamCtxt* stream,
ModelCtxt* model, ServerCtxt* server, ModelCtxt* model, ServerCtxt* server,
DrawCtx* draw, XW_UtilCtxt* util, DrawCtx* draw, XW_UtilCtxt* util,
XP_U16 nPlayers ); XP_U16 nPlayers );

View file

@ -406,7 +406,7 @@ init_relay( CommsCtxt* comms, XWEnv xwe, XP_U16 nPlayersHere, XP_U16 nPlayersTot
#endif #endif
CommsCtxt* CommsCtxt*
comms_make( MPFORMAL XWEnv xwe, XW_UtilCtxt* util, XP_Bool isServer, comms_make( XWEnv xwe, XW_UtilCtxt* util, XP_Bool isServer,
const CommsAddrRec* selfAddr, const CommsAddrRec* hostAddr, const CommsAddrRec* selfAddr, const CommsAddrRec* hostAddr,
const TransportProcs* procs, const TransportProcs* procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY
@ -415,15 +415,15 @@ comms_make( MPFORMAL XWEnv xwe, XW_UtilCtxt* util, XP_Bool isServer,
#endif #endif
XP_U16 forceChannel ) XP_U16 forceChannel )
{ {
CommsCtxt* comms = (CommsCtxt*)XP_CALLOC( mpool, sizeof(*comms) ); CommsCtxt* comms = (CommsCtxt*)XP_CALLOC( util->mpool, sizeof(*comms) );
MUTEX_INIT_CHECKED( &comms->mutex, XP_TRUE, 3 ); MUTEX_INIT_CHECKED( &comms->mutex, XP_TRUE, 3 );
comms->util = util; comms->util = util;
comms->dutil = util_getDevUtilCtxt( util, xwe ); comms->dutil = util_getDevUtilCtxt( util, xwe );
#ifdef DEBUG #ifdef DEBUG
comms->tag = mpool_getTag(mpool); comms->tag = mpool_getTag(util->mpool);
COMMS_LOGFF( TAGFMT(isServer=%d; forceChannel=%d), TAGPRMS, isServer, forceChannel ); COMMS_LOGFF( TAGFMT(isServer=%d; forceChannel=%d), TAGPRMS, isServer, forceChannel );
#endif #endif
MPASSIGN(comms->mpool, mpool); MPASSIGN(comms->mpool, util->mpool);
XP_ASSERT( 0 == (forceChannel & ~CHANNEL_MASK) ); XP_ASSERT( 0 == (forceChannel & ~CHANNEL_MASK) );
comms->isServer = isServer; comms->isServer = isServer;
@ -744,7 +744,7 @@ writeChannelNo( XWStreamCtxt* stream, XP_PlayerAddr channelNo )
} }
CommsCtxt* CommsCtxt*
comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, comms_makeFromStream( XWEnv xwe, XWStreamCtxt* stream,
XW_UtilCtxt* util, XP_Bool isServer, XW_UtilCtxt* util, XP_Bool isServer,
const TransportProcs* procs, const TransportProcs* procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY
@ -778,7 +778,7 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
nPlayersHere = 0; nPlayersHere = 0;
nPlayersTotal = 0; nPlayersTotal = 0;
} }
CommsCtxt* comms = comms_make( MPPARM(mpool) xwe, util, isServer, CommsCtxt* comms = comms_make( xwe, util, isServer,
NULL, NULL, procs, NULL, NULL, procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY
nPlayersHere, nPlayersTotal, rcp, rcClosure, nPlayersHere, nPlayersTotal, rcp, rcClosure,
@ -821,7 +821,7 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
COMMS_LOGFFV( "nAddrRecs: %d", nAddrRecs ); COMMS_LOGFFV( "nAddrRecs: %d", nAddrRecs );
AddressRecord** prevsAddrNext = &comms->recs; AddressRecord** prevsAddrNext = &comms->recs;
for ( int ii = 0; ii < nAddrRecs; ++ii ) { for ( int ii = 0; ii < nAddrRecs; ++ii ) {
AddressRecord* rec = (AddressRecord*)XP_CALLOC( mpool, sizeof(*rec)); AddressRecord* rec = (AddressRecord*)XP_CALLOC( util->mpool, sizeof(*rec));
addrFromStream( &rec->addr, stream ); addrFromStream( &rec->addr, stream );
logAddrComms( comms, &rec->addr, __func__ ); logAddrComms( comms, &rec->addr, __func__ );
@ -853,7 +853,7 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
} }
for ( int ii = 0; ii < queueLen; ++ii ) { for ( int ii = 0; ii < queueLen; ++ii ) {
MsgQueueElem* msg = (MsgQueueElem*)XP_CALLOC( mpool, sizeof(*msg) ); MsgQueueElem* msg = (MsgQueueElem*)XP_CALLOC( util->mpool, sizeof(*msg) );
msg->channelNo = readChannelNo( stream ); msg->channelNo = readChannelNo( stream );
if ( version >= STREAM_VERS_SMALLCOMMS ) { if ( version >= STREAM_VERS_SMALLCOMMS ) {
@ -881,7 +881,7 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
stream_getFromStream( nliStream, stream, nliLen ); stream_getFromStream( nliStream, stream, nliLen );
NetLaunchInfo nli; NetLaunchInfo nli;
if ( nli_makeFromStream( &nli, nliStream ) ) { if ( nli_makeFromStream( &nli, nliStream ) ) {
msg->smp.buf = (XP_U8*)XP_MALLOC( mpool, sizeof(nli) ); msg->smp.buf = (XP_U8*)XP_MALLOC( util->mpool, sizeof(nli) );
XP_MEMCPY( (void*)msg->smp.buf, &nli, sizeof(nli) ); XP_MEMCPY( (void*)msg->smp.buf, &nli, sizeof(nli) );
len = sizeof(nli); /* needed for checksum calc */ len = sizeof(nli); /* needed for checksum calc */
} else { } else {
@ -889,7 +889,7 @@ comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
} }
stream_destroy( nliStream ); stream_destroy( nliStream );
} else { } else {
msg->smp.buf = (XP_U8*)XP_MALLOC( mpool, len ); msg->smp.buf = (XP_U8*)XP_MALLOC( util->mpool, len );
stream_getBytes( stream, (XP_U8*)msg->smp.buf, len ); stream_getBytes( stream, (XP_U8*)msg->smp.buf, len );
} }
dutil_md5sum( comms->dutil, xwe, msg->smp.buf, len, &msg->sb ); dutil_md5sum( comms->dutil, xwe, msg->smp.buf, len, &msg->sb );

View file

@ -143,7 +143,7 @@ typedef struct _TransportProcs {
void* closure; void* closure;
} TransportProcs; } TransportProcs;
CommsCtxt* comms_make( MPFORMAL XWEnv xwe, XW_UtilCtxt* util, CommsCtxt* comms_make( XWEnv xwe, XW_UtilCtxt* util,
XP_Bool isServer, XP_Bool isServer,
const CommsAddrRec* selfAddr, const CommsAddrRec* selfAddr,
const CommsAddrRec* hostAddr, const CommsAddrRec* hostAddr,
@ -180,7 +180,7 @@ XP_Bool comms_getRelayID( const CommsCtxt* comms, XP_UCHAR* buf, XP_U16* len );
void comms_dropHostAddr( CommsCtxt* comms, CommsConnType typ ); void comms_dropHostAddr( CommsCtxt* comms, CommsConnType typ );
XP_Bool comms_getIsHost( const CommsCtxt* comms ); XP_Bool comms_getIsHost( const CommsCtxt* comms );
CommsCtxt* comms_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, CommsCtxt* comms_makeFromStream( XWEnv xwe, XWStreamCtxt* stream,
XW_UtilCtxt* util, XP_Bool isServer, XW_UtilCtxt* util, XP_Bool isServer,
const TransportProcs* procs, const TransportProcs* procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY

View file

@ -178,12 +178,12 @@ engine_getScoreCache( EngineCtxt* engine, XP_U16 row )
* turn it into a separate code module later. * turn it into a separate code module later.
****************************************************************************/ ****************************************************************************/
EngineCtxt* EngineCtxt*
engine_make( MPFORMAL XW_UtilCtxt* util ) engine_make( XW_UtilCtxt* util )
{ {
EngineCtxt* result = (EngineCtxt*)XP_MALLOC( mpool, sizeof(*result) ); EngineCtxt* result = (EngineCtxt*)XP_MALLOC( util->mpool, sizeof(*result) );
XP_MEMSET( result, 0, sizeof(*result) ); XP_MEMSET( result, 0, sizeof(*result) );
MPASSIGN(result->mpool, mpool); MPASSIGN(result->mpool, util->mpool);
result->util = util; result->util = util;
@ -200,10 +200,10 @@ engine_writeToStream( EngineCtxt* XP_UNUSED(ctxt),
} /* engine_writeToStream */ } /* engine_writeToStream */
EngineCtxt* EngineCtxt*
engine_makeFromStream( MPFORMAL XWStreamCtxt* XP_UNUSED(stream), engine_makeFromStream( XWStreamCtxt* XP_UNUSED(stream),
XW_UtilCtxt* util ) XW_UtilCtxt* util )
{ {
EngineCtxt* engine = engine_make( MPPARM(mpool) util ); EngineCtxt* engine = engine_make( util );
/* All the engine's data seems to be used only in the process of finding a /* All the engine's data seems to be used only in the process of finding a
move. So if we're willing to have the set of moves found lost across move. So if we're willing to have the set of moves found lost across

View file

@ -38,10 +38,10 @@ typedef struct BdHintLimits {
XP_U16 engine_getScoreCache( EngineCtxt* engine, XP_U16 row ); XP_U16 engine_getScoreCache( EngineCtxt* engine, XP_U16 row );
EngineCtxt* engine_make( MPFORMAL XW_UtilCtxt* util ); EngineCtxt* engine_make( XW_UtilCtxt* util );
void engine_writeToStream( EngineCtxt* ctxt, XWStreamCtxt* stream ); void engine_writeToStream( EngineCtxt* ctxt, XWStreamCtxt* stream );
EngineCtxt* engine_makeFromStream( MPFORMAL XWStreamCtxt* stream, EngineCtxt* engine_makeFromStream( XWStreamCtxt* stream,
XW_UtilCtxt* util ); XW_UtilCtxt* util );
void engine_init( EngineCtxt* ctxt ); void engine_init( EngineCtxt* ctxt );

View file

@ -195,7 +195,7 @@ game_makeNewGame( MPFORMAL XWEnv xwe, XWGame* game, CurGameInfo* gi,
model_setPlayerDicts( game->model, xwe, &playerDicts ); model_setPlayerDicts( game->model, xwe, &playerDicts );
if ( gi->serverRole != SERVER_STANDALONE ) { if ( gi->serverRole != SERVER_STANDALONE ) {
game->comms = comms_make( MPPARM(mpool) xwe, util, game->comms = comms_make( xwe, util,
gi->serverRole != SERVER_ISCLIENT, gi->serverRole != SERVER_ISCLIENT,
selfAddr, hostAddr, procs, selfAddr, hostAddr, procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY
@ -209,9 +209,8 @@ game_makeNewGame( MPFORMAL XWEnv xwe, XWGame* game, CurGameInfo* gi,
} }
game->server = server_make( MPPARM(mpool) xwe, game->model, game->server = server_make( xwe, game->model, game->comms, util );
game->comms, util ); game->board = board_make( xwe, game->model, game->server,
game->board = board_make( MPPARM(mpool) xwe, game->model, game->server,
NULL, util ); NULL, util );
board_setCallbacks( game->board, xwe ); board_setCallbacks( game->board, xwe );
@ -358,7 +357,7 @@ game_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
XP_ASSERT( hasComms == (SERVER_STANDALONE != gi->serverRole) ); XP_ASSERT( hasComms == (SERVER_STANDALONE != gi->serverRole) );
if ( hasComms ) { if ( hasComms ) {
game->comms = comms_makeFromStream( MPPARM(mpool) xwe, stream, util, game->comms = comms_makeFromStream( xwe, stream, util,
gi->serverRole != SERVER_ISCLIENT, gi->serverRole != SERVER_ISCLIENT,
procs, procs,
#ifdef XWFEATURE_RELAY #ifdef XWFEATURE_RELAY
@ -373,11 +372,11 @@ game_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream,
game->model = model_makeFromStream( MPPARM(mpool) xwe, stream, dict, game->model = model_makeFromStream( MPPARM(mpool) xwe, stream, dict,
&playerDicts, util ); &playerDicts, util );
game->server = server_makeFromStream( MPPARM(mpool) xwe, stream, game->server = server_makeFromStream( xwe, stream,
game->model, game->comms, game->model, game->comms,
util, gi->nPlayers ); util, gi->nPlayers );
game->board = board_makeFromStream( MPPARM(mpool) xwe, stream, game->board = board_makeFromStream( xwe, stream,
game->model, game->server, game->model, game->server,
NULL, util, gi->nPlayers ); NULL, util, gi->nPlayers );
setListeners( game, cp ); setListeners( game, cp );

View file

@ -420,14 +420,14 @@ initServer( ServerCtxt* server, XWEnv xwe )
} /* initServer */ } /* initServer */
ServerCtxt* ServerCtxt*
server_make( MPFORMAL XWEnv xwe, ModelCtxt* model, CommsCtxt* comms, XW_UtilCtxt* util ) server_make( XWEnv xwe, ModelCtxt* model, CommsCtxt* comms, XW_UtilCtxt* util )
{ {
ServerCtxt* result = (ServerCtxt*)XP_MALLOC( mpool, sizeof(*result) ); ServerCtxt* result = (ServerCtxt*)XP_MALLOC( util->mpool, sizeof(*result) );
if ( result != NULL ) { if ( result != NULL ) {
XP_MEMSET( result, 0, sizeof(*result) ); XP_MEMSET( result, 0, sizeof(*result) );
MPASSIGN(result->mpool, mpool); MPASSIGN(result->mpool, util->mpool);
result->vol.model = model; result->vol.model = model;
result->vol.comms = comms; result->vol.comms = comms;
@ -617,17 +617,17 @@ server_getPendingRegs( const ServerCtxt* server )
} }
ServerCtxt* ServerCtxt*
server_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* model, server_makeFromStream( XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* model,
CommsCtxt* comms, XW_UtilCtxt* util, XP_U16 nPlayers ) CommsCtxt* comms, XW_UtilCtxt* util, XP_U16 nPlayers )
{ {
ServerCtxt* server; ServerCtxt* server;
XP_U16 version = stream_getVersion( stream ); XP_U16 version = stream_getVersion( stream );
server = server_make( MPPARM(mpool) xwe, model, comms, util ); server = server_make( xwe, model, comms, util );
getNV( stream, &server->nv, nPlayers ); getNV( stream, &server->nv, nPlayers );
if ( stream_getBits(stream, 1) != 0 ) { if ( stream_getBits(stream, 1) != 0 ) {
server->pool = pool_makeFromStream( MPPARM(mpool) stream ); server->pool = pool_makeFromStream( MPPARM(util->mpool) stream );
} }
for ( int ii = 0; ii < nPlayers; ++ii ) { for ( int ii = 0; ii < nPlayers; ++ii ) {
@ -636,8 +636,7 @@ server_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ModelCtxt* mode
player->deviceIndex = stream_getU8( stream ); player->deviceIndex = stream_getU8( stream );
if ( stream_getU8( stream ) != 0 ) { if ( stream_getU8( stream ) != 0 ) {
player->engine = engine_makeFromStream( MPPARM(mpool) player->engine = engine_makeFromStream( stream, util );
stream, util );
} }
} }
@ -2628,8 +2627,7 @@ server_getEngineFor( ServerCtxt* server, XP_U16 playerNum )
EngineCtxt* engine = player->engine; EngineCtxt* engine = player->engine;
if ( !engine && if ( !engine &&
(inDuplicateMode(server) || gi->players[playerNum].isLocal) ) { (inDuplicateMode(server) || gi->players[playerNum].isLocal) ) {
engine = engine_make( MPPARM(server->mpool) engine = engine_make( server->vol.util );
server->vol.util );
player->engine = engine; player->engine = engine;
} }
@ -2739,7 +2737,7 @@ trayAllowsMoves( ServerCtxt* server, XWEnv xwe, XP_U16 turn,
EngineCtxt* tmpEngine = NULL; EngineCtxt* tmpEngine = NULL;
EngineCtxt* engine = server_getEngineFor( server, turn ); EngineCtxt* engine = server_getEngineFor( server, turn );
if ( !engine ) { if ( !engine ) {
tmpEngine = engine = engine_make( MPPARM(server->mpool) server->vol.util ); tmpEngine = engine = engine_make( server->vol.util );
} }
XP_Bool canMove; XP_Bool canMove;
MoveInfo newMove = {}; MoveInfo newMove = {};

View file

@ -31,10 +31,10 @@
extern "C" { extern "C" {
#endif #endif
ServerCtxt* server_make( MPFORMAL XWEnv xwe, ModelCtxt* model, CommsCtxt* comms, ServerCtxt* server_make( XWEnv xwe, ModelCtxt* model, CommsCtxt* comms,
XW_UtilCtxt* util ); XW_UtilCtxt* util );
ServerCtxt* server_makeFromStream( MPFORMAL XWEnv xwe, XWStreamCtxt* stream, ServerCtxt* server_makeFromStream( XWEnv xwe, XWStreamCtxt* stream,
ModelCtxt* model, CommsCtxt* comms, ModelCtxt* model, CommsCtxt* comms,
XW_UtilCtxt* util, XP_U16 nPlayers ); XW_UtilCtxt* util, XP_U16 nPlayers );