예제 #1
0
static void	manage_errors(t_server *server, t_client *client)
{
    reply(client, ERR_UNKNOWNCOMMAND, client->tab_cmd[0]);
    if (++(client->nb_wrong_cmd) >= LIMIT_WRONG)
    {
        pop_client(server->root_clients, client);
    }
}
예제 #2
0
int			quit_client(t_server *server, t_client *client)
{
  size_t		i;
  char			**tab;

  i = 0;
  tab = client->tab_cmd;
  while (tab && tab[i])
  {
    free(tab[i]);
    i += 1;
  }
  free(tab);
  client->tab_cmd = (char**)0;
  pop_client(server->root_clients, client);
  return (0);
}
예제 #3
0
int	cmd_client(t_client *client, t_kernel *kernel,
		   t_buffer *buff_node)
{
  char	*buffer;

  buffer = read_on(client->fd, buff_node);
  if (buffer == NULL)
    return (-1);
  else if (buffer == (void *)2)
    {
      printf("[\033[31;1mOK\033[0m] Deconnection from %s\n", client->ip);
      pop_client(client->fd, kernel);
      return (1);
    }
  printf("[\033[32;1mClient %s\033[0m] msg : [%s]\n", client->ip, buffer);
  return (launch_cmd(buffer, client, kernel));
}
예제 #4
0
t_client	*check_egg(t_server *server, t_client *client)
{
  t_client	*egg;
  char		*s;

  if ((egg = get_client_egg_by_team(server->clients, client->team)) != NULL)
    {
      asprintf(&s, "eht #%d\n", egg->socket);
      broadcast(server->clients, s, FD_GRAPHIC);
      free(s);

      asprintf(&s, "ebo #%d\n", egg->socket);
      broadcast(server->clients, s, FD_GRAPHIC);
      free(s);

      client->player = egg->player;
      server->clients = pop_client(server->clients, egg->socket);
    }
  else
    create_player(server, client);

  return (server->clients);
}
예제 #5
0
int			read_client(t_server *server, t_client *client)
{
  if (!read512_socket(client->fd, client->buffer_in)
      || !strncmp("QUIT", client->buffer_in, strlen("QUIT")))
  {
#ifdef DEBUG
    fprintf(stdout, "--CLIENT DISCONNECT-- (fd: %d)\n", client->fd);
#endif
    pop_client(server->root_clients, client);
  }
  else
  {
#ifdef DEBUG
    puts_telnet(client->buffer_in);
#endif
    clean_telnet(client->buffer_in);
    if ((client->tab_cmd = my_str_to_wordtab(client->buffer_in)))
    {
      interpret_command(server, client);
      free_wordtab(&(client->tab_cmd));
    }
  }
  return (0);
}