u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout) { mstime_t rv; if (!mbox) return SYS_MBOX_EMPTY; rv = mbox_fetch(*mbox, msg, timeout); if (rv == (mstime_t)-1) return SYS_ARCH_TIMEOUT; else return rv; }
void* server_thread(void* ptr) { message_t* msg; // Setup our pointer to the mailbox (it was created by main) mbox = (sys_mbox_t*) ptr; // Mark server as running serv_up = 1; // Sequence for pseudo-random numbers srand(0); // Server must wait for a message in the mailbox, // execute the desired command and write the result back in the message while (server_is_up()) { msg=(void*) mbox_fetch(mbox); switch (msg->tipo) { case RANDOM: if ( execute_random_service(msg) != 0) { fprintf(stderr,"ERROR when executing RANDOM action\n"); } break; case TIME: if (excute_time_service(msg) != 0) { fprintf(stderr,"ERROR when executing TIME action\n"); } break; case NONE: fprintf(logfile,"Server. NONE message received. Doing nothing\n"); default: break; } // Signal client. Operation done counting_sem_signal(msg->op_completed); } // Server must shutdown fprintf(logfile,"\n....Server is down...\n"); pthread_exit(NULL); }
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg) { if (!mbox) return SYS_MBOX_EMPTY; return mbox_fetch(*mbox, msg, -1); }