Beispiel #1
0
int main(int argc, char *argv[])
{
	//usage error check
	if(argc < 2) { printf("usage : ./server <port number>\n"); exit(1); }
	//make port number
	int server_port = atoi(argv[1]);
	
	//socket variables
	int chat_sd;
	int game_sd;
	int listen_sd;
	struct sockaddr_in addr;
	struct timeval timeout;
	fd_set select_result;
	int on=1;
	
	//pthread variables
	pthread_t thr;

	//etc variables
	int i, j, buf_len, rc;
	int x, y, winner;
	char buffer[4096];
	char smbuf[5];

	//server init
	listen_sd = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sd<0){printf("socket error\n"); exit(2);}
	rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
	if(rc<0){printf("setsockopt error\n"); exit(2);}

	memset(&addr, 0, sizeof(addr));
	addr.sin_family 		= AF_INET;
	addr.sin_addr.s_addr 	= htonl(INADDR_ANY);
	addr.sin_port			= htons(server_port);

	rc = bind(listen_sd, (struct sockaddr *)&addr, sizeof(addr));
	if(rc < 0){printf("bind error\n"); exit(3);} 

	rc = listen(listen_sd, 32);
	if(rc < 0){printf("listen error\n"); exit(4);}

	init_set();
	add_to_set(fileno(stdin));
	add_to_set(listen_sd);

	//timeval init
	timeout.tv_sec = 3*60;
	timeout.tv_usec = 0;

	//Waiting client
	printf("Waiting client\n");
	chat_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(chat_sd);
	printf("accept chat_sd\n");

	game_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(game_sd);
	printf("accept game_sd\n");
	

	//game init
	initlog();
	init_board();
	while(1)
	{
		//your turn
		
		addlog(" < YOUR TURN > ", 3, 1);

		//make thread to check time
		pipe(pipefd);
		add_to_set(pipefd[0]);
		pthread_create(&thr, NULL, thr_time, NULL);

		while(1)
		{
			printboard(1);
			printlog();
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1,&select_result, NULL,NULL, &timeout);
			if(rc<0) exit(5);
			if(rc==0) exit(6); //timecheck error
			if(FD_ISSET(game_sd, &select_result)) w_exit(-1);
			else if(FD_ISSET(fileno(stdin), &select_result)) //stdin
			{
				fgets(buffer,4096,stdin);
				if(buffer[0] == 58) //special command
				{
					if(buffer[2]==' ' && buffer[4]=='\n')
					{
						if(buffer[1]<78 && buffer[1]>64)
							buffer[1] = buffer[1] + 32;
						if(buffer[3]<78 && buffer[3]>64)
							buffer[3] = buffer[3] + 32;
						if(buffer[1]<110 && buffer[1]>96 && buffer[3]<110 && buffer[3]>96)
						{
							y = buffer[1] - 96;
							x = buffer[3] - 96;
							if(is_33(y, x))
								addlog("3x3 not allowed", 3, 1);
							else if(board[y][x]!=0)
								addlog("try again", 3,1);
							else
							{
								pthread_cancel(thr);
								board[y][x] = 1;
								smbuf[0] = y;
								smbuf[1] = x;
								smbuf[2] = '\0';
								send(game_sd, smbuf, 2, 0);
								if(winner = finish_board())
									w_exit(winner);
								break;
							}
						}
					}
					else if(buffer[1]=='q' && buffer[2]=='\n')
					{
						printf("\rdissconnected\n");
						exit(0);
					}
				}
				else
				{
					buffer[strlen(buffer)-1] ='\0';
					send(chat_sd, buffer,strlen(buffer),0);
					addlog(buffer, 1, 1);
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096, 0);
				if(rc<0) exit(7);	//recv error
				if(rc == 0) w_exit(-1); //disconnected
				buffer[rc]='\0';
				addlog(buffer, 2, 1);
			}
			else if(FD_ISSET(pipefd[0], &select_result))
			{
				send(game_sd, "t",1,0);
				break;
			}
		}
		remove_from_set(pipefd[0]);
		//opp turn
		
		while(1)
		{
			printboard(2);
			printlog();
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1, &select_result, NULL,NULL,&timeout);
			if(rc<0) exit(5);
			if(rc==0) exit(6); //timeout;
			if(FD_ISSET(fileno(stdin), &select_result))
			{
				fgets(buffer,4096,stdin);
				if(buffer[0] != ':')
				{
					buffer[strlen(buffer)-1]='\0';
					send(chat_sd, buffer, strlen(buffer),0);
					addlog(buffer,1, 2);
				}
				else if(buffer[1] == 'q' && buffer[2] == '\n')
				{
					printf("\rdisconnected\n");
					exit(0);
				}
			}
			else if(FD_ISSET(game_sd, &select_result))
			{
				rc = recv(game_sd, smbuf,2 ,0);
				if(rc<0) exit(7); //recv error
				if(rc==0) w_exit(-1); //disconnected
				if(smbuf[0] == 't')
				{
					addlog("Opponent timeout", 3, 2);
					break;
				}
				else
				{
					y = smbuf[0];
					x = smbuf[1];
					board[y][x] = 2;
					if(winner = finish_board())
						w_exit(winner);
					break;
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096,0);
				if(rc<0) exit(7);
				if(rc == 0) w_exit(-1);
				buffer[rc]= '\0';
				addlog(buffer, 2, 2);
			}
		}
	}
	
	exit(0);
}
void MonsterGroupManager::LoadMonsterWhitelist(JsonObject &jo)
{
    add_to_set(monster_whitelist, jo, "monsters");
    add_to_set(monster_categories_whitelist, jo, "categories");
}
Beispiel #3
0
Datei: type.c Projekt: mk12/eva
static struct EvalError *check_stdmacro(
		enum StandardMacro stdmacro, struct Expression *args, size_t n) {
	size_t length;
	struct Expression expr;
	struct Set *set;

	switch (stdmacro) {
	case F_DEFINE:
	case F_SET:
		if (args[0].type != E_SYMBOL) {
			return new_eval_error_expr(ERR_TYPE_VAR, args[0]);
		}
		break;
	case F_LAMBDA:
		expr = args[0];
		if (expr.type != E_NULL
				&& expr.type != E_PAIR
				&& expr.type != E_SYMBOL) {
			return new_syntax_error(expr);
		}
		set = new_set();
		while (expr.type != E_NULL) {
			InternId symbol_id;
			if (expr.type == E_PAIR) {
				if (expr.box->car.type != E_SYMBOL) {
					free_set(set);
					return new_eval_error_expr(ERR_TYPE_VAR, expr.box->car);
				}
				symbol_id = expr.box->car.symbol_id;
			} else if (expr.type == E_SYMBOL) {
				symbol_id = expr.symbol_id;
			} else {
				free_set(set);
				return new_eval_error_expr(ERR_TYPE_VAR, expr);
			}
			if (!add_to_set(set, symbol_id)) {
				free_set(set);
				return attach_code(
						new_eval_error_symbol(ERR_DUP_PARAM, symbol_id),
						args[0]);
			}
			if (expr.type == E_SYMBOL) {
				break;
			}
			expr = expr.box->cdr;
		}
		free_set(set);
		break;
	case F_UNQUOTE:
	case F_UNQUOTE_SPLICING:
		return new_eval_error(ERR_UNQUOTE);
	case F_COND:
		for (size_t i = 0; i < n; i++) {
			if (!count_list(&length, args[i]) || length < 2) {
				return new_syntax_error(args[i]);
			}
		}
		break;
	case F_LET:
	case F_LET_STAR:
		expr = args[0];
		set = new_set();
		while (expr.type != E_NULL) {
			if (expr.type == E_PAIR) {
				if (!count_list(&length, expr.box->car) || length != 2) {
					free_set(set);
					return new_syntax_error(expr.box->car);
				}
				if (expr.box->car.box->car.type != E_SYMBOL) {
					free_set(set);
					return new_eval_error_expr(
							ERR_TYPE_VAR, expr.box->car.box->car);
				}
			} else {
				free_set(set);
				return new_syntax_error(args[0]);
			}
			InternId symbol_id = expr.box->car.box->car.symbol_id;
			if (!add_to_set(set, symbol_id)) {
				free_set(set);
				return attach_code(
						new_eval_error_symbol(ERR_DUP_PARAM, symbol_id),
						args[0]);
			}
			expr = expr.box->cdr;
		}
		free_set(set);
		break;
	default:
		break;
	}
	return NULL;
}
Beispiel #4
0
int main(int argc, char *argv[])
{
	//usage error check
	if(argc < 2) { printf("usage : ./server <port number>\n"); exit(1); }
	//make port number
	int server_port = atoi(argv[1]);
	
	//socket variables
	int chat_sd;
	int game_sd;
	int listen_sd;
	struct sockaddr_in addr;
	struct timeval timeout;
	fd_set select_result;
	int on=1;
	
	//pthread variables
	pthread_t thr;

	//etc variables
	int i, j, buf_len, rc;
	int x, y, winner;
	char buffer[4096];
	char smbuf[5];

	//server init
	listen_sd = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sd<0){printf("socket error\n"); exit(2);}
	rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
	if(rc<0){printf("setsockopt error\n"); exit(2);}

	memset(&addr, 0, sizeof(addr));
	addr.sin_family 		= AF_INET;
	addr.sin_addr.s_addr 	= htonl(INADDR_ANY);
	addr.sin_port			= htons(server_port);

	rc = bind(listen_sd, (struct sockaddr *)&addr, sizeof(addr));
	if(rc < 0){printf("bind error\n"); exit(3);} 

	rc = listen(listen_sd, 32);
	if(rc < 0){printf("listen error\n"); exit(4);}

	init_set();
	add_to_set(listen_sd);

	//timeval init
	timeout.tv_sec = 3*60;
	timeout.tv_usec = 0;

	//Waiting client
	printf("Waiting client\n");
	chat_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(chat_sd);
	printf("accept chat_sd\n");

	game_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(game_sd);
	printf("accept game_sd\n");
	
	//ncurses init
	window=initscr();
	keypad(stdscr,TRUE);
	mousemask(BUTTON1_RELEASED, NULL);


	//game init
	initlog();
	init_board();
	while(1)
	{
		//your turn
		
		addlog(" < YOUR TURN > ", 3, 1);

		//make thread to check mouse
		pipe(pipefd);
		add_to_set(pipefd[0]);
		pthread_create(&thr, NULL, thr_mouse, NULL);
		while(1)
		{
			printall(1);
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1,&select_result, NULL,NULL, &timeout);
			if(rc<0) s_exit(5);
			if(rc==0) s_exit(6); //timecheck error
			if(FD_ISSET(game_sd, &select_result)) w_exit(-1);
			else if(FD_ISSET(pipefd[0],&select_result))
			{
				read(pipefd[0],smbuf,2);
				pthread_cancel(thr);
				y=smbuf[0];
				x=smbuf[1];
				board[y][x] = 1;
				send(game_sd,smbuf,2,0);
				if(winner = finish_board())
					w_exit(winner);
				break;

			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096, 0);
				if(rc<0) s_exit(7);	//recv error
				if(rc == 0) w_exit(-1); //disconnected
				buffer[rc]='\0';
				addlog(buffer, 2, 1);
			}
		}
		//opp turn
		
		while(1)
		{
			printall(2);
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1, &select_result, NULL,NULL,&timeout);
			if(rc<0) s_exit(5);
			if(rc==0) s_exit(6); //timeout;
			if(FD_ISSET(game_sd, &select_result))
			{
				rc = recv(game_sd, smbuf,2 ,0);
				if(rc<0) s_exit(7); //recv error
				if(rc==0) w_exit(-1); //disconnected
				if(smbuf[0] == 't')
				{
					addlog("Opponent timeout", 3, 2);
					break;
				}
				else
				{
					y = smbuf[0];
					x = smbuf[1];
					board[y][x] = 2;
					if(winner = finish_board())
						w_exit(winner);
					break;
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096,0);
				if(rc<0) s_exit(7);
				if(rc == 0) w_exit(-1);
				buffer[rc]= '\0';
				addlog(buffer, 2, 2);
			}
		}
	}
	
	s_exit(0);
}
Beispiel #5
0
 virtual column_id_set
 imports() const override {
     column_id_set result;
     for (const auto a: _args)  add_to_set(result, a->imports());
     return result;
 }
Beispiel #6
0
/*
 * APOLLO_init
 *
 *	initialises window to occupy current window
 */
APOLLO_init()
{
	pad_$window_desc_t 	window;
	int 	size, prefx, prefy, prefxs, prefys, x, y, w, h;
	short 	i;

	pad_$set_scale(stream_$stdout,
		       1,
		       1,
		       status);

	pad_$inq_windows(stream_$stdout,
			 window_info,
				  10,
			   n_windows,
			     status);

	w = window_info[0].width;
	h = window_info[0].height;
	x = window_info[0].left;
	y = window_info[0].top;

	getprefposandsize(&prefx, &prefy, &prefxs, &prefys);

	if (prefx > -1) {
		x = prefx;
		y = prefy;
	}

	if (prefxs > -1) {
		w = prefxs;
		h = prefys;
	}

	size = MIN(w, h);
	vdevice.sizeX = vdevice.sizeY = size - 1;
	vdevice.sizeSx = w - 1;
	vdevice.sizeSy = h - 1;

        init_bitmap_size.x_size = w;
        init_bitmap_size.y_size = h;

	source.window_base.x_coord = source.window_base.y_coord = 0;
	source.window_size.x_size = init_bitmap_size.x_size;
	source.window_size.y_size = init_bitmap_size.y_size;
	dest_pos.x_coord = dest_pos.y_coord = 0;

	/*
	 * Inquire about the actual display ....
	 */

	gpr_$inq_disp_characteristics(mode,
				      stream_$stdout,
				      (short)60,
				      disp,
				      disp_len,
				      status);

	vdevice.depth = disp.n_planes;
	hi_plane_id = disp.n_planes - 1;

	if (prefx == -1 && prefxs == -1) {
		stream_id = stream_$stdout;
	} else {
		window.top = y;
		window.left = x;
		window.width = w;
		window.height = h;

		pad_$create_window("", 0,
				pad_$transcript, 
				1, 
				window,
				stream_id,
				status
		);

		pad_$set_auto_close(stream_id, 1, true, status);
	}

        gpr_$init(mode,
                  stream_id,
                  init_bitmap_size,
                  hi_plane_id,
                  front_bitmap,
                  status);

	current_bitmap = front_bitmap;

	gpr_$set_auto_refresh(true, status);
  
	gpr_$set_cursor_active(false,status);

	/*  Set up all the character stuff  */

	first_time = 1;

	/*  create a key set for the event interupts  */

	lib_$init_set(keys, (short)256);
	lib_$init_set(mouse_keys, (short)6);

	lib_$add_to_set(mouse_keys, (short)6, KBD_$M1D);
	lib_$add_to_set(mouse_keys, (short)6, KBD_$M2D);
	lib_$add_to_set(mouse_keys, (short)6, KBD_$M3D);
	lib_$add_to_set(mouse_keys, (short)6, KBD_$M1U);
	lib_$add_to_set(mouse_keys, (short)6, KBD_$M2U);
	lib_$add_to_set(mouse_keys, (short)6, KBD_$M3U);

	for (i = 0; i < 128; i++) 
		lib_$add_to_set(keys, (short)256, (short)i);

	gpr_$enable_input(gpr_$keystroke, keys, status);
	gpr_$enable_input(gpr_$buttons, keys, status);
	gpr_$enable_input(gpr_$locator, keys, status);

	/*  set default color (colour)   */

	if (disp.n_planes > 1) {
		gpr_$inq_color_map(0L, (short)MAXCOLORS, old_color_value, status);
		gpr_$inq_color_map(0L, (short)MAXCOLORS, color_value, status);

		color_value[0] = COLOR_ENTRY(0,0,0);         /* color--black   */
		color_value[1] = COLOR_ENTRY(255,0,0);       /* color--red     */
		color_value[2] = COLOR_ENTRY(0,255,0);       /* color--green   */
		color_value[3] = COLOR_ENTRY(255,255,0);     /* color--yellow  */
		color_value[4] = COLOR_ENTRY(0,0,255);       /* color--blue    */
		color_value[5] = COLOR_ENTRY(255,0,255);     /* color--magenta */
		color_value[6] = COLOR_ENTRY(0,255,255);     /* color--cyan    */
		color_value[7] = COLOR_ENTRY(255,255,255);   /* color--white   */

		/* modify color table */
		gpr_$acquire_display(status);
		gpr_$set_color_map((long)0,
				    (short)MAXCOLORS,
				    color_value,
				    status);
		gpr_$release_display(status);
	}

	back_used = 0;

	return(1);
}