예제 #1
0
파일: basic.c 프로젝트: ralight/ggz
static int compare_seats(GGZdMod *mod, int num, GGZSeat *seats)
{
	int count, i;
	GGZSeat test;
	

	count = ggzdmod_get_num_seats(mod);
	if (count == num)
		printf("-- Success: number of seats is %d\n", num);
	else {
		printf("-- Error: number of seats is %d, got %d\n", num, count);
		return -1;
	}
	
	for (i = 0; i < num; i++) {
		test = ggzdmod_get_seat(mod, i);
		if (seatcmp(test, seats[i]) == 0)
			printf("-- Success: seat %d matches\n", i);
		else {
			printf("-- Error: seat %d is actually:", i);
			print_seat(seats[i]);
			printf("but we got:");
			print_seat(test);
			return -1;
		}
	}
	
	return 0;
}
예제 #2
0
void ggz_server_gameover( int fd )
{
	int max, i;
	GGZSeat seat;
	GGZGameResult results[TEG_MAX_PLAYERS];
	int scores[TEG_MAX_PLAYERS];
	PLIST_ENTRY pL;
	PSPLAYER pJ;

	max = ggzdmod_get_num_seats( g_ggzdmod );

	for(i=0;i<max;i++) {
		seat = ggzdmod_get_seat( g_ggzdmod, i );
		if( seat.fd == fd ) {
			results[i] = GGZ_GAME_WIN;
		} else {
			results[i] = GGZ_GAME_LOSS;
		}

		scores[i] = 0;
		pL = g_list_player.Flink;
		while( !IsListEmpty( &g_list_player ) && (pL != &g_list_player) ) {
			pJ = (PSPLAYER) pL;
			if( pJ->fd == seat.fd ){
				scores[i] = pJ->player_stats.score;
			}
			pL = LIST_NEXT(pL);
		}
	}

	ggzdmod_report_game( g_ggzdmod, NULL, results, scores );
}
예제 #3
0
/* Callback for GGZDMOD_EVENT_STATE */
static void _handle_ggz_state(GGZdMod *ggz, GGZdModEvent event, const void *data)
{
	switch(ggzdmod_get_state(ggz)) {
	case GGZDMOD_STATE_PLAYING:
		break;
	case GGZDMOD_STATE_WAITING:
	{
		GGZSeat seat;
		int i;
		int robot_socket;
		int max = ggzdmod_get_num_seats( g_ggzdmod );

		// launch robots if necesary
		for (i = 0; i < max; i++) {
			seat = ggzdmod_get_seat( g_ggzdmod, i );
			if( seat.type == GGZ_SEAT_BOT ) {
				if (launch_robot( &robot_socket, "--ggz" ) == TEG_STATUS_SUCCESS )
				{
					seat.fd = robot_socket;

					ggzdmod_set_seat( g_ggzdmod, &seat );

					net_printf(seat.fd,"%s=1\n",TOKEN_GGZ);
				} else
					ggzdmod_log(g_ggzdmod, "\tegserver: Failed launching bot :-(!");
			}
		}
		break;
	}
	case GGZDMOD_STATE_DONE:
		break;
	default:
		break;
	}
}
예제 #4
0
TEG_STATUS ggz_server_find_ggzname( int fd, char *n, int len )
{
	int max, i;
	GGZSeat seat;
	GGZSpectator spectator;

	if(!n)
		return TEG_STATUS_ERROR;

	max = ggzdmod_get_num_seats( g_ggzdmod );
	for(i=0;i<max;i++) {
		seat = ggzdmod_get_seat( g_ggzdmod, i );
		if( seat.fd == fd ) {
			/* dont update robot's names */
			if( seat.type == GGZ_SEAT_BOT )
				return TEG_STATUS_ERROR;

			if( seat.name ) {
				strncpy(n,seat.name,len);
				n[len]=0;
				return TEG_STATUS_SUCCESS;
			} else
				return TEG_STATUS_ERROR;
		}
	}

	/* Ok, I cound't find the name in seats, find it in spectators */
	max = ggzdmod_get_max_num_spectators( g_ggzdmod );
	for(i=0;i<max;i++) {
		spectator = ggzdmod_get_spectator( g_ggzdmod, i );
		if( spectator.fd == fd ) {
			if( spectator.name ) {
				strncpy(n,spectator.name,len);
				n[len]=0;
				return TEG_STATUS_SUCCESS;
			}
		}
	}

	return TEG_STATUS_ERROR;
}
예제 #5
0
파일: basic.c 프로젝트: ralight/ggz
int main (void) {
	
	GGZdMod *mod;
	GGZdModType type;
	GGZSeat control[8];
	int test = 5, num, i;
	void * ptr;

	/* Only enable memory debugging */
	ggz_debug_init(NULL, NULL);
	ggz_debug_enable("MEMCHECK");

	printf("-- Testing object creation -- \n");

	/* Test with an invalid parameter */
	mod = ggzdmod_new(-1);
	if (mod != NULL)
		printf("-- Error : ggzdmod_new(-1) returns %p\n", mod);
	else
		printf("-- Success: ggzdmod_new(-1) returns NULL.\n");

	/* Test ggz side object */
	mod = ggzdmod_new(GGZDMOD_GGZ);
	type = ggzdmod_get_type(mod);
	if (type == GGZDMOD_GGZ) 
		printf("-- Success: creation of type GGZDMOD_GGZ\n");
	else
		printf("-- Error: type %d != GGZDMOD_GGZ\n", type);
	ggzdmod_free(mod);

	/* Test game side object */
	mod = ggzdmod_new(GGZDMOD_GAME);
	type = ggzdmod_get_type(mod);
	if (type == GGZDMOD_GAME) 
		printf("-- Success: creation of type GGZDMOD_GAME\n");
	else
		printf("-- Error: type %d != GGZDMOD_GAME\n", type);
	ggzdmod_free(mod);

	
	/* Test various accessor functions */
	mod = ggzdmod_new(GGZDMOD_GGZ);
	if (ggzdmod_get_state(mod) != GGZDMOD_STATE_CREATED)
		printf("-- Error: initial state: %d\n",
		       ggzdmod_get_state(mod));
	if (ggzdmod_get_fd(mod) != -1)
		printf("-- Error: initial fd: %d\n",
		       ggzdmod_get_fd(mod));
	if (ggzdmod_get_num_seats(mod) > 0)
		printf("-- Error: initial seats: %d\n",
		       ggzdmod_get_num_seats(mod));
	if (ggzdmod_get_gamedata(mod) != NULL)
		printf("-- Error: initial gamedata: %p\n",
		       ggzdmod_get_gamedata(mod));
	

	/* Set setting/getting game data */
	ggzdmod_set_gamedata(mod, &test);
	ptr = ggzdmod_get_gamedata(mod);
	if (ptr == &test)
		printf("-- Success: setting of gamedata to %p\n", &test);
	else
		printf("-- Error: set data to %p, got %p\n", &test, ptr);
	ggzdmod_set_gamedata(mod, NULL);
	ptr = ggzdmod_get_gamedata(mod);
	if (ptr == NULL)
		printf("-- Success: setting of gamedata to %p\n", NULL);
	else
		printf("-- Error: set data to %p, got %p\n", NULL, ptr);


	/* Set setting/getting num_seats */
	ggzdmod_set_num_seats(mod, 3);
	num = ggzdmod_get_num_seats(mod);
	if (num == 3)
		printf("-- Success: setting of seats to %d\n", 3);
	else
		printf("-- Error: set seats to %d, got  %d\n", 3, num);

	/* Check initial value of seats */
	for (i = 0; i < 8; i++) {
		control[i].num = i;
		control[i].type = GGZ_SEAT_OPEN;
		control[i].name = NULL;
		control[i].fd = -1;
	}
	compare_seats(mod, 3, control);
	
	/* Test seat setting/getting */
	control[0].num = 0;
	control[0].type = GGZ_SEAT_PLAYER;
	control[0].name = "Test 0";
	control[0].fd = 17;
	ggzdmod_set_seat(mod, &control[0]);

	control[1].num = 1;
	control[1].type = GGZ_SEAT_BOT;
	control[1].name = "Test 1";
	control[1].fd = 32;
	ggzdmod_set_seat(mod, &control[1]);

	control[2].num = 2;
	control[2].type = GGZ_SEAT_RESERVED;
	control[2].name = "Test 2";
	control[2].fd = 80;
	ggzdmod_set_seat(mod, &control[2]);

	compare_seats(mod, 3, control);
	
	/* Pass NULL in to each function. */
	printf(" -- Testing passing ggzdmod=NULL to functions --\n");
	ggzdmod_free(NULL);
	if (ggzdmod_get_fd(NULL) != -1)
		printf(" -- Error: ggzdmod_get_fd(NULL) == %d\n", ggzdmod_get_fd(NULL));
	(void)ggzdmod_get_type(NULL);
	(void)ggzdmod_get_state(NULL);
	if (ggzdmod_get_num_seats(NULL) > 0)
		printf(" -- Error: ggzdmod_get_num_seats(NULL) == %d\n", ggzdmod_get_num_seats(NULL));
	(void)ggzdmod_get_seat(NULL, 0);
	if (ggzdmod_get_gamedata(NULL) != NULL)
		printf(" -- Error: ggzdmod_get_gamedata(NULL) == %p\n", ggzdmod_get_gamedata(NULL));
	ggzdmod_set_num_seats(NULL, 8);
	ggzdmod_set_handler(NULL, GGZDMOD_EVENT_PLAYER_DATA, test_handler);
	ggzdmod_set_module(NULL, "<GAME>", "/tmp", test_args);
	if (ggzdmod_set_seat(NULL, &control[0]) >= 0)
		printf(" -- Error: ggzdmod_set_seat(NULL, ...) claimed to succeed.\n");
	if (ggzdmod_dispatch(NULL) >= 0)
		printf(" -- Error: ggzdmod_dispatch(NULL) claimed to succeed.\n");
	if (ggzdmod_loop(NULL) >= 0)
		printf(" -- Error: ggzdmod_loop(NULL) claimed to succeed.\n");
	if (ggzdmod_set_state(NULL, GGZDMOD_STATE_DONE) >= 0)
		printf(" -- Error: ggzdmod_set_state(NULL, GGZDMOD_STATE_DONE) claimed to succeed.\n");
	if (ggzdmod_connect(NULL) >= 0)
		printf(" -- Error: ggzdmod_connect(NULL) claimed to succeed.\n");
	if (ggzdmod_disconnect(NULL) >= 0)
		printf(" -- Error: ggzdmod_disconnect(NULL) claimed to succeed.\n");
	if (ggzdmod_log(NULL, "Test message") >= 0)
		printf(" -- Error: ggzdmod_log(NULL, ...) claimed to succeed.\n");
	
	
	ggzdmod_free(mod);

	/* FIXME: test all functions with a NULL object */
	/* FIXME: generally test functions with bad parameter values */

	ggz_debug_cleanup(GGZ_CHECK_MEM);
	
	printf(" -- All tests complete -- \n");

	return 0;
}