int main(int argc, char *argv[]) { g_shm = (sharedif_t*)shmem_open(SHMID_MINFLOWCAP, sizeof(sharedif_t)); if (g_shm == NULL) { printf("ERROR: unable to get pointer to shared memory segment\n"); return 0; } tval_t ts={0,0}; for (int i=0;i<60*60;i++) // stop after hour { if (ts.tv_sec == 0) { ts.tv_sec = time(NULL); continue;} if ((time(NULL) - ts.tv_sec) >= 1) { ts.tv_sec = time(NULL); every_second(ts, g_shm); } usleep(250000); } }
void SuperNET_idler(uv_idle_t *handle) { static int counter; static double lastattempt,lastclock; double millis; void *up; struct udp_queuecmd *qp; struct write_req_t *wr,*firstwr = 0; int32_t flag; char *jsonstr,*retstr,**ptrs; if ( Finished_init == 0 ) return; millis = milliseconds();//((double)uv_hrtime() / 1000000); if ( millis > (lastattempt + APISLEEP) ) { lastattempt = millis; #ifdef TIMESCRAMBLE while ( (wr= queue_dequeue(&sendQ)) != 0 ) { if ( wr == firstwr ) { //queue_enqueue(&sendQ,wr); process_sendQ_item(wr); if ( Debuglevel > 2 ) printf("SuperNET_idler: reached firstwr.%p\n",firstwr); break; } if ( wr->queuetime == 0 || wr->queuetime > lastattempt ) { process_sendQ_item(wr); // free(wr); libuv does this break; } if ( firstwr == 0 ) firstwr = wr; queue_enqueue(&sendQ,wr); } if ( Debuglevel > 2 && queue_size(&sendQ) != 0 ) printf("sendQ size.%d\n",queue_size(&sendQ)); #else #endif flag = 1; while ( flag != 0 ) { flag = 0; if ( (qp= queue_dequeue(&udp_JSON)) != 0 ) { //printf("process qp argjson.%p\n",qp->argjson); char previpaddr[64]; expand_ipbits(previpaddr,qp->previpbits); jsonstr = SuperNET_json_commands(Global_mp,previpaddr,qp->argjson,qp->tokenized_np->H.U.NXTaddr,qp->valid,qp->decoded); //printf("free qp (%s) argjson.%p\n",jsonstr,qp->argjson); if ( jsonstr != 0 ) free(jsonstr); free(qp->decoded); free_json(qp->argjson); free(qp); flag++; } else if ( (ptrs= queue_dequeue(&JSON_Q)) != 0 ) { char *call_SuperNET_JSON(char *JSONstr); jsonstr = ptrs[0]; if ( Debuglevel > 2 ) printf("dequeue JSON_Q.(%s)\n",jsonstr); if ( (retstr= call_SuperNET_JSON(jsonstr)) == 0 ) retstr = clonestr("{\"result\":null}"); ptrs[1] = retstr; if ( ptrs[2] != 0 ) queue_GUIpoll(ptrs); flag++; } } if ( process_storageQ() != 0 ) { //printf("processed storage\n"); } } #ifndef TIMESCRAMBLE while ( (wr= queue_dequeue(&sendQ)) != 0 ) { //printf("sendQ size.%d\n",queue_size(&sendQ)); process_sendQ_item(wr); } #endif while ( (up= queue_dequeue(&UDP_Q)) != 0 ) process_udpentry(up); if ( millis > (lastclock + 1000) ) { poll_pricedbs(); every_second(counter); retstr = findaddress(0,0,0,0,0,0,0,0,0,0); if ( retstr != 0 ) { printf("findaddress completed (%s)\n",retstr); free(retstr); } if ( (counter % 60) == 17 ) { every_minute(counter/60); update_Allnodes(); poll_telepods("BTCD"); poll_telepods("BTC"); } counter++; lastclock = millis; } usleep(APISLEEP * 1000); }