Browse Source

test

release/v0.1
jl777 9 years ago
parent
commit
695de3185c
  1. 3
      iguana/pangea777.h
  2. 93
      iguana/pangea_api.c
  3. 6
      iguana/pangea_hand.c

3
iguana/pangea777.h

@ -59,7 +59,8 @@ struct cards777_privdata
struct hand_info
{
bits256 checkprod,*cardpubs,*final,community256[5],cards[CARDS777_MAXPLAYERS][2];
bits256 checkprod,cardpubs[CARDS777_MAXCARDS + 1 + CARDS777_MAXPLAYERS],community256[5];
bits256 final[CARDS777_MAXCARDS * CARDS777_MAXPLAYERS],cards[CARDS777_MAXPLAYERS][2];
bits256 othercardpubs[CARDS777_MAXPLAYERS];
int64_t betsize,lastraise,betsizesnapshot;
uint32_t starttime,handmask,lastbettor,startdecktime,betstarted,finished,encodestarted;

93
iguana/pangea_api.c

@ -152,22 +152,52 @@ void pangea_playeradd(struct supernet_info *myinfo,struct table_info *tp,struct
p->nxt64bits = acct777_nxt64bits(p->playerpub);
}
struct table_info *pangea_table(bits256 tablehash)
int32_t pangea_allocsize(struct table_info *tp,int32_t N,int32_t setptrs)
{
struct table_info *tp; int32_t allocsize; bits256 pangeahash; char str[65];
long allocsize = sizeof(*tp); int32_t numcards = 52;//tp->G.numcards;
//N = tp->G.numactive;
allocsize += sizeof(bits256) * (2 * ((N * numcards * N) + (N * numcards)));
//allocsize += sizeof(bits256) * ((numcards + 1) + (N * numcards));
if ( tp != 0 && setptrs != 0 )
{
//tp->hand.cardpubs = tp->priv.data;
//tp->hand.final = &tp->hand.cardpubs[numcards + 1 + N];
tp->priv.audits = tp->priv.data;//&tp->hand.final[N * numcards];
tp->priv.outcards = &tp->priv.audits[N * numcards * N];
tp->priv.xoverz = &tp->priv.outcards[N * numcards];
tp->priv.allshares = (void *)&tp->priv.xoverz[N * numcards]; // N*numcards*N
}
return((int32_t)allocsize);
}
struct table_info *pangea_tablealloc(struct table_info *tp,int32_t N)
{
int32_t allocsize = pangea_allocsize(tp,N,0);
if ( tp == 0 || tp->G.allocsize != allocsize )
{
tp = realloc(tp,allocsize);
pangea_allocsize(tp,N,1);
}
return(tp);
}
struct table_info *pangea_table(bits256 tablehash,int32_t N)
{
struct table_info *tp; bits256 pangeahash; char str[65];
pangeahash = calc_categoryhashes(0,"pangea",0);
if ( (tp= category_info(pangeahash,tablehash)) == 0 )
{
allocsize = (int32_t)(sizeof(tp->G) + sizeof(void *)*2);
if ( (tp= calloc(1,allocsize)) == 0 )
printf("error: couldnt create table.(%s)\n",bits256_str(str,tablehash));
tp = pangea_tablealloc(0,N);
//allocsize = (int32_t)(sizeof(tp->G) + sizeof(void *)*2);
//if ( (tp= calloc(1,allocsize)) == 0 )
// printf("error: couldnt create table.(%s)\n",bits256_str(str,tablehash));
}
if ( tp != 0 )
{
category_subscribe(SuperNET_MYINFO(0),pangeahash,tablehash);
if ( category_infoset(pangeahash,tablehash,tp) == 0 )
printf("error: couldnt set table.(%s)\n",bits256_str(str,tablehash)), tp = 0;
else tp->G.allocsize = allocsize;
//else tp->G.allocsize = allocsize;
}
return(tp);
}
@ -192,7 +222,7 @@ char *pangea_jsondatacmd(struct supernet_info *myinfo,bits256 tablehash,struct p
jaddbits256(argjson,"playerpub",myinfo->myaddr.persistent);
jaddstr(argjson,"handle",jstr(json,"handle"));
nxt64bits = acct777_nxt64bits(myinfo->myaddr.persistent);
if ( (tp= pangea_table(tablehash)) != 0 && tp->G.numactive < tp->G.maxplayers )
if ( (tp= pangea_table(tablehash,9)) != 0 && tp->G.numactive < tp->G.maxplayers )
{
for (i=0; i<tp->G.numactive; i++)
if ( tp->G.P[i].nxt64bits == nxt64bits )
@ -256,35 +286,6 @@ void pangea_sendcmd(struct supernet_info *myinfo,struct table_info *tp,char *cmd
free(pm);
}
int32_t pangea_allocsize(struct table_info *tp,int32_t setptrs)
{
long allocsize = sizeof(*tp); int32_t N,numcards = tp->G.numcards;
N = tp->G.numactive;
allocsize += sizeof(bits256) * (2 * ((N * numcards * N) + (N * numcards)));
allocsize += sizeof(bits256) * ((numcards + 1) + (N * numcards));
if ( setptrs != 0 )
{
tp->hand.cardpubs = tp->priv.data;
tp->hand.final = &tp->hand.cardpubs[numcards + 1 + N];
tp->priv.audits = &tp->hand.final[N * numcards];
tp->priv.outcards = &tp->priv.audits[N * numcards * N];
tp->priv.xoverz = &tp->priv.outcards[N * numcards];
tp->priv.allshares = (void *)&tp->priv.xoverz[N * numcards]; // N*numcards*N
}
return((int32_t)allocsize);
}
struct table_info *pangea_tablealloc(struct table_info *tp)
{
int32_t allocsize = pangea_allocsize(tp,0);
if ( tp->G.allocsize != allocsize )
{
tp = realloc(tp,allocsize);
pangea_allocsize(tp,1);
}
return(tp);
}
void pangea_ping(PANGEA_HANDARGS)
{
@ -399,7 +400,7 @@ void pangea_parse(struct supernet_info *myinfo,struct pangea_msghdr *pm,cJSON *a
{
bits256 tablehash; char *method; struct table_info *tp;
tablehash = jbits256(argjson,"subhash");
tp = pangea_table(tablehash);
tp = pangea_table(tablehash,9);
if ( (method= jstr(argjson,"cmd")) != 0 )
{
if ( strcmp(method,"lobby") == 0 )
@ -477,19 +478,17 @@ int32_t pangea_hexmsg(struct supernet_info *myinfo,void *data,int32_t len,char *
}
else
{
if ( (tp= pangea_table(tablehash)) != 0 && pangea_rwdata(0,pm->serialized,len-(int32_t)((long)pm->serialized-(long)pm),pm->serialized) > 0 )
if ( (tp= pangea_table(tablehash,9)) != 0 && pangea_rwdata(0,pm->serialized,len-(int32_t)((long)pm->serialized-(long)pm),pm->serialized) > 0 )
{
cmdbits = stringbits(pm->cmd);
for (i=0; i<sizeof(tablecmds)/sizeof(*tablecmds); i++)
{
if ( tablecmds[i].cmdbits == cmdbits )
{
allocsize = pangea_allocsize(tp,0);
allocsize = pangea_allocsize(tp,9,0);
if ( tp->G.allocsize < allocsize )
{
tp = pangea_tablealloc(tp);
category_infoset(tp->G.gamehash,tp->G.tablehash,tp);
}
tp = pangea_tablealloc(tp,9);
category_infoset(tp->G.gamehash,tp->G.tablehash,tp);
if ( strcmp(tablecmds[i].cmdstr,"newhand") == 0 )
{
tp->G.numactive = pm->turni;
@ -683,7 +682,7 @@ INT_AND_ARRAY(pangea,host,minplayers,params)
{
bits256 tablehash; struct table_info *tp; uint8_t space[sizeof(struct pangea_msghdr) + 4096];
OS_randombytes(tablehash.bytes,sizeof(tablehash));
tp = pangea_table(tablehash);
tp = pangea_table(tablehash,9);
if ( tp != 0 )
{
pangea_gamecreate(&tp->G,(uint32_t)time(NULL),tablehash,json);
@ -701,14 +700,14 @@ HASH_AND_STRING(pangea,join,tablehash,handle)
HASH_AND_ARRAY(pangea,start,tablehash,params)
{
struct table_info *tp; int32_t allocsize;
if ( (tp= pangea_table(tablehash)) != 0 )
if ( (tp= pangea_table(tablehash,9)) != 0 )
{
if ( tp->G.numactive >= tp->G.minplayers && pangea_tableismine(myinfo,tp) >= 0 )
{
allocsize = pangea_allocsize(tp,0);
allocsize = pangea_allocsize(tp,9,0);
if ( tp->G.allocsize < allocsize )
{
tp = pangea_tablealloc(tp);
tp = pangea_tablealloc(tp,9);
category_infoset(tp->G.gamehash,tp->G.tablehash,tp);
}
if ( tp->G.creatorbits == myinfo->myaddr.nxt64bits )

6
iguana/pangea_hand.c

@ -125,12 +125,8 @@ int32_t pangea_myrank(struct supernet_info *myinfo,struct table_info *tp,struct
void pangea_clearhand(struct table_info *tp)
{
bits256 *final,*cardpubs; int32_t i; struct hand_info *hand = &tp->hand;
final = hand->final, cardpubs = hand->cardpubs;
int32_t i; struct hand_info *hand = &tp->hand;
memset(hand,0,sizeof(*hand));
hand->final = final, hand->cardpubs = cardpubs;
memset(final,0,sizeof(*final) * tp->G.N * tp->G.numcards);
memset(cardpubs,0,sizeof(*cardpubs) * (1 + tp->G.numcards));
for (i=0; i<5; i++)
hand->community[i] = 0xff;
for (i=0; i<tp->G.N; i++)

Loading…
Cancel
Save