Esempio n. 1
0
/* Connection functions */
int connectionWaitForInit (int connSock,
		uint32_t * width, uint32_t * height, uint32_t * sampling, char ** firstFrame) {
	wireworld_message_t message[4];

	assert (width != NULL);
	assert (height != NULL);
	assert (sampling != NULL);
	assert (firstFrame != NULL);

	if (recvMessages (connSock, message, 4) == 0 && message[0] == R_INIT) {
		// If init message, retrieve sizes and sampling
		*width = message[1];
		*height = message[2];
		*sampling = message[3];

		// Prepare buffer to read init map
		uint32_t data_size = wireworldFrameMessageSize (*width, *height);
		wireworld_message_t * buf = malloc (data_size * sizeof (wireworld_message_t));
		assert (buf != NULL);

		// Read map
		if (recvMessages (connSock, buf, data_size) == 0) {
			// Alloc char map
			*firstFrame = malloc (*width * *height * sizeof (char));
			assert (*firstFrame != NULL);

			// Convert network map to char map
			networkToCharMap (buf, *firstFrame, *width, *height);

			// destroy temp buffer
			free (buf);
			return 0;
		} else {
			fprintf (stderr, "Unable to read the first frame\n");
			free (buf);
			return -1;
		}
	} else {
		fprintf (stderr, "Received something which is not an init message\n");
		return -1;
	}
}
Esempio n. 2
0
int connectionWaitFrameRequest (int connSock) {
	assert (connSock != -1);

	wireworld_message_t message;
	int res = recvMessages (connSock, &message, 1);
	if (res == 0) {
		if (message == R_FRAME) {
			return 0;
		} else {
			fprintf (stderr, "Expected R_FRAME message but got something else : %u\n", message);
		}
	} else if (res == 1) {
		return 1;
	} else {
		fprintf (stderr, "Error while receiving R_FRAME request\n");
	}
	return -1;
}
Esempio n. 3
0
void * mediatorThreadLoop( void * data ) {
    // Grab this guy from the data
    ShinyFilesystemMediator * sfm = (ShinyFilesystemMediator *) data;
    
    // Our ROUTER socket to deal with all incoming fuse noise
    zmq::socket_t * medSock = new zmq::socket_t( *sfm->ctx, ZMQ_ROUTER );
    medSock->bind( sfm->getZMQEndpointFuse() );
    
    // My list of zmq messages
    std::vector<zmq::message_t *> msgList;
    
    bool keepRunning = true;
    // Keep going as long as we don't get a DESTROY message.  :P
    while( keepRunning ) {
        // Check for messages from fuse threads
        recvMessages( medSock, msgList );
        
        // If we actually received anything
        if( msgList.size() ) {
            if( msgList.size() > 2 ) {
                // Now begins the real work.
                keepRunning = sfm->handleMessage( medSock, msgList );
            } else {
                WARN( "Malformed message to mediator! msgList.size() == %d", msgList.size() );
                for( int i = 0; i < msgList.size(); ++i ) {
                    WARN( "  %d) [%d] %.*s", i, msgList[i]->size(), msgList[i]->size() > 10 ? 10 : msgList[i]->size() );
                }
            }
            
            freeMsgList( msgList );
        }
    }
    
    // Cleanup the socket so that closing the context doesn't wait forever.  :P
    delete( medSock );
    return NULL;   
}