/************************************************************************
 * int room_index	Identifies the room to add connection(s) to.
 * char* rooms[]	Array of room names, each to correspond to a file.
 * int connections	Total number of connections the room 
 * 			identified by room_index should have.
 ***********************************************************************/
void initRoom(int room_index, char* rooms[], int connections, char* directory ) {
	char *room_name = rooms[room_index];
	FILE *file_p = NULL;
	// need to open in directory, so craft the string here
	char room_dir[100] = "";
	strcat_safe( room_dir, 100, directory );
	strcat_safe( room_dir, 100, "/" );
	strcat_safe( room_dir, 100, rooms[room_index] );

	file_p = fopen( room_dir, "a+" );
	// Check for successful file opening.
	if ( ! file_p ) {
		printf( "Error opening file in function initRoom!\n" );
		exit( 1 );
	}

	int connections_in_file = countConnections( file_p );
	int connections_to_make = connections - connections_in_file;

	while ( connections_to_make > 0 ) {
		int rand_index = randInRange( 0, 6 );
		if ( makeConnection( room_index, rand_index, rooms, directory, file_p ) ) {
			connections_to_make--;
		}
	}

	fclose(file_p);
}
void listLocations( char *room, char *directory ) {
	char other_1[100] = "";
	char other_1a[100] = "";
	char name[100] = "";
	
	char path[100] = "";
	// prepare directory string
	strcat_safe( path, 100, directory );
	strcat_safe( path, 100, "/" );
	strcat_safe( path, 100, room );
	FILE *file = fopen( path, "a+" );
	
	int connections = countConnections( file ) - 1; // countConnections actually counts the number of lines in file - 1 
	fseek( file, 0, SEEK_SET );
	
	
	int count = 0;
	printf( "POSSIBLE CONNECTIONS: " );
	while( fscanf( file, "%s %s %s\n", other_1, other_1a, name ) == 3 ) {
		if ( ! strcmp( other_1, "CONNECTION" ) ) {
			printf( "%s", name );
			if (count + 1 < connections)
				printf( ", " );
			count++;
		}
	}
	printf( ".\n" );
	
	fclose( file );
}
/******************************************************************************
 * Checks to see whether the two rooms identified by index are the same,
 * and returns 0 if they are (avoiding a room making a connection to itself).
 *
 * If the two rooms identified are different, a connection will be made
 * between them unless the connection already exists.
 *****************************************************************************/
int makeConnection( int first, int second, char* rooms[], char* directory, FILE* first_room_file ) {
	if ( first == second )
		return 0;

	// get room names
	char *first_room = rooms[first];
	char *second_room = rooms[second];
	
	// reserve room for file path strings
	char second_dir[100] = "";

	
	strcat_safe( second_dir, 100, directory );
	strcat_safe( second_dir, 100, "/" );
	strcat_safe( second_dir, 100, second_room );

	
	// Open room files for reading and writing
	FILE *second_room_file = fopen( second_dir, "a+" );

	
	if ( ! ( first_room_file && second_room_file ) ) {
		printf( "in makeConnection: second_dir: %s\n", second_dir );
		printf( "Error opening file in function makeConnection\n" );
		exit( 1 );
	}

	
	if ( connectionExists( first_room_file, second_room_file, first_room, second_room ) ) {
		return 1;
	}	

	
	int c1 = countConnections( first_room_file ) + 1;
	int c2 = countConnections( second_room_file ) + 1;
	fprintf( first_room_file, "CONNECTION %d: %s\n", c1, second_room );
	fprintf( second_room_file,"CONNECTION %d: %s\n", c2, first_room );
	
	// Close only the file this function opened
	fclose( second_room_file );

	return 1;	
}
Ejemplo n.º 4
0
void selectRole() {
	int nConnection = countConnections();
	if(nConnection==2) {
		printf("%s: I am the Center\n",moduleName);
		role = CENTER;
		int i, count=0;
		for(i=0;i<8;i++) {
			if(atronApi_isOtherConnectorNearby(i))  {
				char leftMsg[] = {ROLESET, LEFT};
				if(count==0) atronApi_sendMessage(leftMsg, 2, i); //select left 
				
				char rightMsg[] = {ROLESET, RIGHT};
				if(count==1) atronApi_sendMessage(rightMsg, 2, i); //select right	
				count++;
			}
		}
	}
	while(role==UNDEFINED) {  atronApi_yield(); }
}