int init_teams_max_players(t_list teams, int const max_players) { unsigned int i; t_team *tmp_team; i = 0; while (i < list_get_size(teams)) { if ((tmp_team = list_get_elem_at_position(teams, i)) != NULL) { if (strlen(tmp_team->name) > 512) { fprintf(stderr, ERR_TEAM_NAME); return (-1); } tmp_team->max_players = max_players; } i++; } if (i <= 1) { fprintf(stderr, ERR_NBTEAMS); return (-1); } return (0); }
int check_and_read_clients(fd_set *readf, t_list list, unsigned int i) { t_client *client; int ret; while (++i < list_get_size(list)) { if ((client = list_get_elem_at_position(list, i)) != NULL) { client->buffs.cmds ? free_content(client->buffs.cmds) : 0; client->buffs.cmds ? client->buffs.cmds->destroy(client->buffs.cmds) : 0; client->buffs.cmds = NULL; if (FD_ISSET(client->sock, readf)) { if ((ret = get_cmd_buff(client->sock, &client->buffs)) == -1) return (fprintf(stderr, ERR_COMMAND), -1); else if (ret == -2) { store_answer_c(client, strdup(RPL_OVERFLOW), 0); fprintf(stderr, ERR_OVERFLOW); } } } } return (0); }
int check_and_write_players(fd_set *writef, t_list players, unsigned int i) { t_player *player; int ret; char *buff; while (++i < list_get_size(players)) { if ((player = list_get_elem_at_position(players, i)) != NULL) { if (FD_ISSET(player->sock, writef) && player->buff != NULL) { buff = player->buff; if ((ret = write(player->sock, buff, strlen(buff))) == -1) { player->off = 1; return (fprintf(stderr, ERR_ANSWER), 0); } else if ((unsigned int)ret != strlen(buff)) fprintf(stderr, ERR_WRITE); free(player->buff); player->buff = NULL; } } } return (0); }
int check_and_write_clients(fd_set *writef, t_list clients, unsigned int i) { t_client *client; int ret; char *buff; while (++i < list_get_size(clients)) { if ((client = list_get_elem_at_position(clients, i)) != NULL) { if (FD_ISSET(client->sock, writef) && client->buff != NULL) { buff = client->buff; if ((ret = write(client->sock, buff, strlen(buff))) == -1) { client->off = 1; return (fprintf(stderr, ERR_ANSWER), 0); } else if ((unsigned int)ret != strlen(buff)) fprintf(stderr, ERR_WRITE); free(client->buff); client->buff = NULL; } } } return (0); }
void free_player_structure(t_player *player) { unsigned int i; t_task *task; i = -1; if (player == NULL) return ; while (++i < list_get_size(player->queue_tasks)) { if ((task = list_get_elem_at_position(player->queue_tasks, i)) != NULL) { if (task->cmd) free(task->cmd); if (task->params) free(task->params); if (task->real) free(task->real); task->cmd = NULL; task->params = NULL; task->real = NULL; free(task); } } }
static int send_broadcast(t_server *server, t_player *player, t_list tmp, char *params) { t_player *tmp_player; int tile; char buffer[4096]; unsigned int i; i = -1; while (++i < list_get_size(tmp)) { if ((tmp_player = list_get_elem_at_position(tmp, i)) != NULL && tmp_player->sock != player->sock) { tile = determine_best_way(server, player, tmp_player); if (memset(buffer, 0, 1024) == NULL || snprintf(buffer, 1024, BROADCAST, tile, params) == -1) return (-1); if (store_answer_p(tmp_player, strdup(buffer), 0) == -1) return (-1); } } return (pbc(server, player)); }
void *list_get_elem_at_position(t_list list, unsigned int position) { if (list == NULL) return (0); else { if (position == 0) return (list->value); else return (list_get_elem_at_position(list->next, --position)); } }
int broadcast_ia(t_server *server, t_player *player) { t_list tmp; t_task *current; if (!server || !player) { fprintf(stderr, INTERNAL_ERR); return (-1); } if ((current = list_get_elem_at_position(player->queue_tasks, 0)) == NULL) return (-1); if (current->params == NULL || strlen(current->params) > 512) return (store_answer_p(player, strdup(KO), 0)); else if (store_answer_p(player, strdup(OK), 0) == -1) return (fprintf(stderr, ERR_BUFFER), -1); tmp = server->all_players; return (send_broadcast(server, player, tmp, current->params)); }
int send_all_graphics(t_server *srv, char *msg) { t_client *tmp; unsigned int i; i = 0; if (srv == NULL || msg == NULL) return (-1); while (i < list_get_size(srv->graphic_clients)) { if ((tmp = list_get_elem_at_position(srv->graphic_clients, i)) != NULL) { if (store_answer_c(tmp, strdup(msg), 0) == -1) return (fprintf(stderr, ERR_BUFFER), -1); } i++; } free(msg); return (0); }
int send_all_players(t_server *srv, t_player *p, char *msg) { t_player *tmp; unsigned int i; i = 0; if (srv == NULL || msg == NULL) return (-1); while (i < list_get_size(srv->all_players)) { if ((tmp = list_get_elem_at_position(srv->all_players, i)) != NULL) { if (p == NULL && store_answer_p(tmp, strdup(msg), 0) == -1) return (fprintf(stderr, ERR_BUFFER), -1); else if (tmp->sock != p->sock && store_answer_p(tmp, strdup(msg), 0) == -1) return (fprintf(stderr, ERR_BUFFER), -1); } i++; } free(msg); return (0); }
static int waiting_list(t_server *srv) { struct timeb now; unsigned int i; t_client *cl; i = 0; ftime(&now); while (i < list_get_size(srv->queue_clients)) { if ((cl = list_get_elem_at_position(srv->queue_clients, i)) != NULL) { if (calculate_elapse(&cl->timer.val, &now) >= 10.0) { if (close(cl->sock) == -1) return (-1); list_del_elem_at_position(&srv->queue_clients, i); return (0); } } i++; } return (0); }