char *PARSEBALANCE(struct exchange_info *exchange,double *balancep,char *coinstr) { //[[{"type":"deposit","currency":"btc","amount":"0.0","available":"0.0"},{"type":"deposit","currency":"usd","amount":"0.0","available":"0.0"},{"type":"exchange","currency":"btc","amount":"0.01065851","available":"0.01065851"},{"type":"exchange","currency":"usd","amount":"23386.37278962","available":"0.00378962"},{"type":"trading","currency":"btc","amount":"0.0","available":"0.0"},{"type":"trading","currency":"usd","amount":"0.0","available":"0.0"}]] int32_t i,n,ind; char field[64],*str,*typestr,*itemstr = 0; cJSON *item,*obj,*array; double amounts[3],avail[3],val0,val1; *balancep = 0.; strcpy(field,coinstr), tolowercase(field); memset(amounts,0,sizeof(amounts)); memset(avail,0,sizeof(avail)); if ( exchange->balancejson != 0 && is_cJSON_Array(exchange->balancejson) != 0 && (n= cJSON_GetArraySize(exchange->balancejson)) > 0 ) { for (i=0; i<n; i++) { if ( (item= jitem(exchange->balancejson,i)) != 0 ) { if ( (str= jstr(item,"currency")) != 0 && strcmp(field,str) == 0 ) { val0 = jdouble(item,"amount"); val1 = jdouble(item,"available"); if ( (typestr= jstr(item,"type")) != 0 ) { if ( strcmp(typestr,"deposit") == 0 ) ind = 0; else if ( strcmp(typestr,"exchange") == 0 ) ind = 1; else if ( strcmp(typestr,"trading") == 0 ) ind = 2; else ind = -1; if ( ind >= 0 ) { amounts[ind] = val0; avail[ind] = val1; } } } } } if ( (obj= cJSON_CreateObject()) != 0 ) { touppercase(field); *balancep = avail[0] + avail[1] + avail[2]; jaddstr(obj,"base",field); jaddnum(obj,"balance",*balancep); jaddnum(obj,"total",amounts[0]+amounts[1]+amounts[2]); array = cJSON_CreateArray(), jaddinum(array,avail[0]), jaddinum(array,amounts[0]), jadd(obj,"deposit",array); array = cJSON_CreateArray(), jaddinum(array,avail[1]), jaddinum(array,amounts[1]), jadd(obj,"exchange",array); array = cJSON_CreateArray(), jaddinum(array,avail[2]), jaddinum(array,amounts[2]), jadd(obj,"trading",array); itemstr = jprint(obj,1); } } if ( itemstr == 0 ) return(clonestr("{\"error\":\"cant find coin balance\"}")); return(itemstr); }
STRING_AND_INT(iguana,bundlehashes,activecoin,height) { struct iguana_info *ptr; struct iguana_bundle *bp; int32_t i,hdrsi; cJSON *retjson,*array; struct iguana_ramchaindata *rdata; if ( (ptr= iguana_coinfind(activecoin)) != 0 ) { hdrsi = height / coin->chain->bundlesize; if ( hdrsi < coin->bundlescount && hdrsi >= 0 && (bp= coin->bundles[hdrsi]) != 0 ) { if ( (rdata= bp->ramchain.H.data) != 0 ) { array = cJSON_CreateArray(); for (i=0; i<IGUANA_NUMLHASHES; i++) jaddinum(array,rdata->lhashes[i].txid); retjson = cJSON_CreateObject(); jaddstr(retjson,"result","success"); jaddbits256(retjson,"sha256",rdata->sha256); jadd(retjson,"bundlehashes",array); return(jprint(retjson,1)); } else return(clonestr("{\"error\":\"ramchain not there\"}")); } else return(clonestr("{\"error\":\"height is too big\"}")); } else return(clonestr("{\"error\":\"activecoin is not active\"}")); }
cJSON *pangea_handitem(int32_t *cardip,cJSON **pitemp,uint8_t type,uint64_t valA,uint64_t *bits64p,bits256 card,int32_t numplayers) { int32_t cardi,n,i,rebuy,busted; char str[128],hexstr[65],cardpubs[(CARDS777_MAXCARDS+1)*64+1]; cJSON *item,*array,*pitem = 0; item = cJSON_CreateObject(); *cardip = -1; switch ( type ) { case CARDS777_START: jaddnum(item,"handid",valA); init_hexbytes_noT(cardpubs,(void *)bits64p,(int32_t)((CARDS777_MAXCARDS+1) * sizeof(bits256))); jaddstr(item,"cardpubs",cardpubs); break; case CARDS777_RAKES: jaddnum(item,"hostrake",dstr(valA)); jaddnum(item,"pangearake",dstr(*bits64p)); break; case CARDS777_SNAPSHOT: jaddnum(item,"handid",valA); array = cJSON_CreateArray(); for (i=0; i<CARDS777_MAXPLAYERS; i++) { if ( i < numplayers ) jaddinum(array,dstr(bits64p[i])); else jaddinum(array,dstr(0)); } jadd(item,"snapshot",array); //printf("add snapshot for numplayers.%d\n",numplayers); break; case CARDS777_CHANGES: n = (int32_t)(valA & 0xf); busted = (int32_t)((valA>>4) & 0xffff); rebuy = (int32_t)((valA>>20) & 0xffff); if ( busted != 0 ) jaddnum(item,"busted",busted); if ( rebuy != 0 ) jaddnum(item,"rebuy",rebuy); array = cJSON_CreateArray(); for (i=0; i<n; i++) jaddinum(array,dstr(bits64p[i])); jadd(item,"balances",array); break; case CARDS777_WINNINGS: if ( (int32_t)valA >= 0 && valA < numplayers ) jaddnum(item,"player",valA); jaddnum(item,"won",dstr(*bits64p)); if ( pitem == 0 ) pitem = cJSON_CreateObject(); jaddnum(pitem,"won",dstr(*bits64p)); break; case CARDS777_FACEUP: *cardip = cardi = (int32_t)(valA >> 8); if ( cardi >= 0 && cardi < 52 ) jaddnum(item,"cardi",cardi); else printf("illegal cardi.%d valA.%llu\n",cardi,(long long)valA); valA &= 0xff; if ( (int32_t)valA >= 0 && valA < numplayers ) jaddnum(item,"player",valA); else if ( valA == 0xff ) jaddnum(item,"community",cardi - numplayers*2); cardstr(str,card.bytes[1]); jaddnum(item,str,card.bytes[1]); init_hexbytes_noT(hexstr,card.bytes,sizeof(card)); jaddstr(item,"privkey",hexstr); break; default: if ( (int32_t)valA >= 0 && valA < numplayers ) jaddnum(item,"player",valA); jaddstr(item,"action",pangea_typestr(type)); if ( pitem == 0 ) pitem = cJSON_CreateObject(); if ( *bits64p != 0 ) { jaddnum(item,"bet",dstr(*bits64p)); jaddnum(pitem,pangea_typestr(type),dstr(*bits64p)); } else jaddstr(pitem,"action",pangea_typestr(type)); break; } *pitemp = pitem; return(item); }