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); } }
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); }