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"); }
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; }
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); }
virtual column_id_set imports() const override { column_id_set result; for (const auto a: _args) add_to_set(result, a->imports()); return result; }
/* * 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); }