Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
{
    if (!mbox)
	return SYS_MBOX_EMPTY;
    return mbox_fetch(*mbox, msg, -1);
}