Example #1
0
void client_service(int cli_fd, uint32_t events, int epoll_fd)
{
	char *msg = 0;
	size_t len = 0;

	int if_clear_client = 1;

	if (events & EPOLLIN) {
		/* odczyt wiadomosci */
		len = receive_msg(&msg, cli_fd);
		if(len > 0) {
			if(msg[0] =='2') {
				if_clear_client = handle_login(msg, len, cli_fd);
			}
			else if(msg[0] == '6') {
				if_clear_client = handle_userlist(msg, len, cli_fd);
			}
		}
	}

	if (if_clear_client) {
		clear_client(cli_fd, epoll_fd);
	}
}
Example #2
0
void server(void)
{
   SOCKET sock = init_connection();
   char buffer[BUF_SIZE];
   int max = sock;
   fd_set rdfs;
   while(1)
   {
      FD_ZERO(&rdfs);
      FD_SET(STDIN_FILENO, &rdfs);
      FD_SET(sock, &rdfs);
      if(connected)
      {
         FD_SET(client.sock, &rdfs);
      }
      if(select(max + 1, &rdfs,NULL, NULL, NULL) == -1)
      {
         perror("select()");
         exit(errno);
      }
    if(FD_ISSET(STDIN_FILENO, &rdfs))
      {
         fgets(buffer, BUF_SIZE - 1, stdin);
         {
            char *p = NULL;
            p = strstr(buffer, "\n");
            if(p != NULL)
           {
               *p = 0;
            }
            else
            {
               buffer[BUF_SIZE - 1] = 0;
            }
         }
         if(connected && send(client.sock, buffer, strlen(buffer), 0) < 0)
	{
	  perror("send()");
	  exit(errno);
	  }
      }
      else if(FD_ISSET(sock, &rdfs))
      {
         SOCKADDR_IN csin = { 0 };
         socklen_t sinsize = sizeof csin;
         int csock = accept(sock, (SOCKADDR *)&csin, &sinsize);
         if(csock == SOCKET_ERROR)
         {
            perror("accept()");
            continue;
         }
         if(read_client(csock, buffer) == -1)
         {
              continue;
         }
         max = csock > max ? csock : max;
         FD_SET(csock, &rdfs);
         Client c = { csock };
         strncpy(c.name, buffer, BUF_SIZE - 1);
	 client=c;
         connected=1;
	}
      else
      {
         if(connected)
         {
           if(FD_ISSET(client.sock, &rdfs))
            {
               int c = read_client(client.sock, buffer);
               if(c == 0)
               {
                  closesocket(client.sock);
                  remove_client(&client);
		  puts("Client déconnecté");
               }
               else
               {
		  printf("%s : ",client.name);
                  puts(buffer);
               }
            }
         }
      }
   }

   clear_client(&client);
   end_connection(sock);
}