Пример #1
0
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);
}
Пример #2
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);
}
Пример #3
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);
}
Пример #4
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);
}
Пример #5
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);
	}
    }
}
Пример #6
0
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));
}
Пример #7
0
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));
    }
}
Пример #8
0
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));
}
Пример #9
0
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);
}
Пример #10
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);
}
Пример #11
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);
}