From cc08fcbf1296d46fa8cfd5e949bc48fcd2f88c78 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 27 Feb 2019 03:05:41 -1100 Subject: [PATCH] Test --- src/cc/rogue/main.c | 68 ++++++++++++++++++++++++++++++++++++++++++-- src/cc/rogue/rogue.c | 21 +++++++------- src/cc/rogue/rogue.h | 10 ++++--- src/cc/rogue_rpc.cpp | 8 +++--- 4 files changed, 86 insertions(+), 21 deletions(-) diff --git a/src/cc/rogue/main.c b/src/cc/rogue/main.c index 2daa1d0c7..d814bcbd3 100644 --- a/src/cc/rogue/main.c +++ b/src/cc/rogue/main.c @@ -708,11 +708,48 @@ char *komodo_issuemethod(char *userpass,char *method,char *params,uint16_t port) #include "rogue.h" -void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num) +int32_t rogue_confirmed(uint256 txid) { - char cmd[16384],hexstr[16384],params[32768],*retstr; int32_t i; + char params[512],*retstr; cJSON *retjson; int32_t numconfs = -1; + sprintf(params,"[\"%s\"]",txid.GetHex().c_str()); + if ( (retstr= komodo_issuemethod(USERPASS,"getrawtransaction",params,ROGUE_PORT)) != 0 ) + { + fprintf(stderr,"params.(%s) -> %s\n",params,retstr); + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + numconfs = juint(retjson,"confirmations"); + free_json(retjson); + } + free(retstr); + } + fprintf(stderr,"numconfs %d\n",numconfs); + return(numconfs); +} + +void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num) +{ + char cmd[16384],hexstr[16384],params[32768],*retstr; int32_t i; uint256 txid; + memset(&txid,0,sizeof(txid)); if ( rs->guiflag != 0 && Gametxidstr[0] != 0 ) { + if ( rs->keytxid != zeroid ) + { + if ( rogue_confirmed(rs->keytxid) < 2 ) + { + if ( waitflag == 0 ) + return(0); + else + { + while ( rogue_confirmed(rs->keytxid) < 2 ) + { + fprintf(stderr,"pre-rebroadcast\n"); + RelayTransaction(rs->keystrokestx); + sleep(10); + } + } + } + rs->keytxid = zeroid; + } for (i=0; ikeystrokestx = tx; + rs->keytxid = txid; + fprintf(stderr,"set keystrokestx <- %s\n",txid.GetHex().c_str()); + } + } + } + free_json(retjson); + } free(retstr); } - sleep(1); + if ( waitflag != 0 && rs->keytxid != zeroid ) + { + while ( rogue_confirmed(rs->keytxid) < 2 ) + { + fprintf(stderr,"post-rebroadcast\n"); + RelayTransaction(rs->keystrokestx); + sleep(3); + } + } } } } diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index 10fff1dd7..2b8a0ffc0 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -119,7 +119,7 @@ int32_t roguefname(char *fname,uint64_t seed,int32_t counter) } #ifdef test -int32_t flushkeystrokes(struct rogue_state *rs) +int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag) { char fname[1024]; FILE *fp; int32_t i,retflag = -1; roguefname(fname,rs->seed,rs->counter); @@ -155,7 +155,7 @@ int32_t flushkeystrokes(struct rogue_state *rs) #ifdef BUILD_ROGUE // stubs for inside daemon -void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num) +void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num) { } @@ -165,16 +165,17 @@ int32_t rogue_setplayerdata(struct rogue_state *rs,char *gametxidstr) } #endif -int32_t flushkeystrokes(struct rogue_state *rs) +int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag) { if ( rs->num > 0 ) { // need to get existing keystrokes including mempool // create keystrokes that are not saved - rogue_progress(rs,rs->seed,rs->buffered,rs->num); + //rs->keytxid = rogue_progress(rs,waitflag,rs->seed,&rs->buffered[rs->lastnum],rs->num - rs->lastnum); + //rs->lastnum = rs->num; + rogue_progress(rs,waitflag,rs->seed,rs->buffered,rs->num); memset(rs->buffered,0,sizeof(rs->buffered)); rs->counter++; - rs->num = 0; } return(0); } @@ -182,7 +183,7 @@ int32_t flushkeystrokes(struct rogue_state *rs) void rogue_bailout(struct rogue_state *rs) { char cmd[512]; - flushkeystrokes(rs); + flushkeystrokes(rs,1); //sleep(5); return; /*fprintf(stderr,"bailing out\n"); @@ -562,15 +563,15 @@ playit(struct rogue_state *rs) } else { - if ( rs->needflush != 0 && rs->num > 1000 ) + if ( rs->needflush != 0 ) { - if ( flushkeystrokes(rs) == 0 ) + if ( flushkeystrokes(rs,0) == 0 ) rs->needflush = 0; } } } if ( rs->guiflag != 0 ) - flushkeystrokes(rs); + flushkeystrokes(rs,1); endit(0); } @@ -595,7 +596,7 @@ int32_t _quit() if ( rs->sleeptime != 0 ) refresh(); score(rs,purse, 1, 0); - flushkeystrokes(rs); + flushkeystrokes(rs,1); my_exit(0); } else diff --git a/src/cc/rogue/rogue.h b/src/cc/rogue/rogue.h index b64af8f1a..e5ea51771 100644 --- a/src/cc/rogue/rogue.h +++ b/src/cc/rogue/rogue.h @@ -361,12 +361,14 @@ typedef union _bits256 bits256; struct rogue_state { + uint256 keytxid; + CTransaction keystrokestx; uint64_t seed; char *keystrokes; uint32_t needflush,replaydone; - int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring; + int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring,lastnum; struct rogue_player P; - char buffered[8192]; + char buffered[65536*16]; uint8_t playerdata[10000]; }; extern struct rogue_state globalR; @@ -374,12 +376,12 @@ extern struct rogue_state globalR; int rogue(int argc, char **argv, char **envp); void rogueiterate(struct rogue_state *rs); int32_t roguefname(char *fname,uint64_t seed,int32_t counter); -int32_t flushkeystrokes(struct rogue_state *rs); +int32_t flushkeystrokes(struct rogue_state *rs,int32_t waitflag); int32_t rogue_restorepack(struct rogue_state *rs); void restore_player(struct rogue_state *rs); int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t num,struct rogue_player *player,int32_t sleepmillis); void rogue_bailout(struct rogue_state *rs); -void rogue_progress(struct rogue_state *rs,uint64_t seed,char *keystrokes,int32_t num); +void rogue_progress(struct rogue_state *rs,int32_t waitflag,uint64_t seed,char *keystrokes,int32_t num); int32_t rogue_setplayerdata(struct rogue_state *rs,char *gametxidstr); #define ROGUE_MAXTOTAL (pstats.s_str*2) diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index 4d0011d06..08d1b72e7 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -361,7 +361,7 @@ UniValue rogue_playerobj(std::vector playerdata,uint256 playertxid,uint } } //fprintf(stderr,"trace spend to %s/v%d\n",txid.GetHex().c_str(),vout); - if ( n++ > 1000 ) + if ( n++ > ROGUE_MAXITERATIONS ) break; } obj.push_back(Pair("gametxid",gametxid.GetHex())); @@ -588,7 +588,7 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx { txid = gametxid; vout = 1+i; - fprintf(stderr,"scan forward active.%s spenttxid.%s\n",gametxid.GetHex().c_str(),txid.GetHex().c_str()); + //fprintf(stderr,"scan forward active.%s spenttxid.%s\n",gametxid.GetHex().c_str(),txid.GetHex().c_str()); n = 0; while ( CCgettxout(txid,vout,1) < 0 ) { @@ -603,10 +603,10 @@ int32_t rogue_playersalive(int32_t &openslots,int32_t &numplayers,uint256 gametx } txid = spenttxid; vout = 0; - fprintf(stderr,"n.%d next txid.%s/v%d\n",n,txid.GetHex().c_str(),spentvini); + //fprintf(stderr,"n.%d next txid.%s/v%d\n",n,txid.GetHex().c_str(),spentvini); if ( spentvini != 0 ) break; - if ( n++ > 1000 ) + if ( n++ > ROGUE_MAXITERATIONS ) break; } if ( txid != zeroid )