示例#1
0
int		free_before_reset(t_server *server)
{
  if (!server)
    return (0);
  if (remove_players_from_team(server) == -1)
    return (-1);
  free_list(server->data.eggs, 0);
  free_clients(server->queue_clients, 0, 0);
  free_clients(server->graphic_clients, 0, 0);
  free_clients(server->all_players, 1, 0);
  return (0);
}
示例#2
0
void		free_infos(t_server *infos)
{
  uint32_t	i;

  free_clients(infos);
  free_eggs(infos);
  free_clients_team_name(infos);
  free_incantation(infos);
  if (infos->teams_names != NULL)
  {
    i = 0;
    while (infos->teams_names[i] != NULL)
      {
	free(infos->teams_names[i]);
	++i;
      }
    free(infos->teams_names);
    infos->teams_names = NULL;
  }
  free(infos->map);
  infos->map = NULL;
  free(infos->nb_players_team);
  infos->nb_players_team = NULL;
  free(infos->network.local_ip);
  infos->network.local_ip = NULL;
  free(infos->network.fds);
  infos->network.fds = NULL;
}
示例#3
0
/**
 * Executa o comando CLOSE
 * @param server
 * @param socket
 * @param msg
 * @param addr
 * @param port
 */
void run_close(Server* server, Socket socket, char* msg, char* addr, int port){
    Client* from = find_user_by_host_port(server->client_list, addr, port);
    if(from == NULL){
        send_message(socket, addr, port, "CLOSE not registered\n");
        return;
    }

    Client* prev;
    for(prev = server->client_list; prev->next != NULL; prev = prev->next){
        if(prev->next == from){
            break;
        }
    }

    //Remove o usuario da lista de clientes
    if(server->client_list == from){
        server->client_list = from->next;
        from->next = NULL;
    }else{
        prev->next = from->next;
        from->next = NULL;
    }
    free_clients(from);

    send_message(socket, addr, port, "CLOSE success\n");
}
示例#4
0
int		free_all(t_server *server, int const ret_value)
{
  if (!server)
    return (ret_value);
  free_list(server->data.eggs, ret_value);
  free_teams(server->data.teams, ret_value);
  free_clients(server->queue_clients, 0, ret_value);
  free_clients(server->graphic_clients, 0, ret_value);
  free_clients(server->all_players, 1, ret_value);
  free_int_tab(server->data.required_players, ret_value);
  free_int_tab(server->data.ports, ret_value);
  free_int_tab(server->socks, ret_value);
  free_double_int_tab(server->data.resources, ret_value);
  free(server->data.timers);
  return (free_map(server->data.map, ret_value));
}
示例#5
0
/*
 * Free the contents of a single group_t.
 */
static void
free_group(group_t *group)
{
	if (group) {
		free_phcis(group->nphcis, group->phcis);
		free_clients(group->nclients, group->clients);
		free(group);
	}
}
示例#6
0
void		destroy(t_server *server)
{
  free_teams(server->teams);
  free_clients(server->clients);
  free_map(server->map);
  free(server);

  printf("Bye.\n");
}
示例#7
0
static void free_provider(provider_t *p) {
        if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, fileno(p->file), NULL) < 0) {
		fprintf(stderr, "epoll_ctl: %s\n", strerror(errno));
                exit(1);
        }

        free(p->command);
        fclose(p->file);
        free(p->header);
        free_clients(p->clients);
        free(p);
}
示例#8
0
文件: iod.c 项目: Yomin/neobox
void cleanup()
{
    DEBUG(printf("cleanup\n"));
    if(screen_fd)
        close(screen_fd);
    if(aux_fd)
        close(aux_fd);
    if(power_fd)
        close(power_fd);
    if(sock)
        close(sock);
    free(screen_dev);
    free(aux_dev);
    free(power_dev);
    free(pfds);
    free_clients();
}
示例#9
0
/**
 * Executa o comando NICK
 * @param server
 * @param socket
 * @param msg
 * @param addr
 * @param port
 */
void run_nick(Server* server, Socket socket, char* msg, char* addr, int port){
    char username[20];
    char command[10];

    //estrai o comando e o nome de usuario da mensagem
    sscanf(msg, "%s%s", command, username);

    Client* c = new_client(username, addr, port);

    Client** last;
    //verifica se o nome de usuario ja esta em uso
    for(last = &server->client_list; *last != NULL; last = &(*last)->next){
        if(strcmp(username, (*last)->username) == 0){
            send_message(socket, addr, port, "NICK taken\n");
            free_clients(c);
            return;
        }
    }
    *last = c;
    send_message(socket, addr, port, "NICK success\n");
}
示例#10
0
static int
get_affected_clients(rcm_handle_t *hdl, char *rsrc, int cmd, int flags,
    char ***clientsp)
{
	int nclients = 0;
	phci_t phci;
	group_t *group;
	char **clients = NULL;

	/* Build a dummy phci_t for use with bsearch(). */
	phci.path = rsrc;

	/* Analyze the effects upon each group. */
	for (group = group_list; group != NULL; group = group->next) {

		/* If the PHCI isn't in the group, then no effects.  Skip. */
		if (bsearch(&phci, group->phcis, group->nphcis, sizeof (phci_t),
		    compare_phci) == NULL)
			continue;

		/*
		 * Merge in the clients.  All clients are merged in for getinfo
		 * operations.  Otherwise it's contingent upon a state change
		 * being transferred to the clients as a result of changing
		 * the PHCI's state.
		 */
		if ((cmd == CMD_GETINFO) ||
		    detect_client_change(hdl, cmd, flags, group, rsrc)) {
			if (merge_clients(&nclients, &clients, group) < 0) {
				free_clients(nclients, clients);
				return (-1);
			}
		}
	}

	/* Return the array of affected disks */
	*clientsp = clients;
	return (0);
}
示例#11
0
void shutdown_server(Server* server){
    free_clients(server->client_list);
    free(server);
}