void Chat::draw(Session& sess, int num_lines, int start, int scroll) { // if current session is empty if (sess.messages.size() == 0) { print_starting_message("This is the beginning of your chat."); return; } start = std::min(start, (int)sess.messages.size() - 1); if (scroll) { wborder(win, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); wscrl(win, scroll); } for (int i = 0; i < abs(num_lines) && i < sess.messages.size(); i++, start++) { int dim = sess.delta - sess.scrolled_back + start; bool sender = sess.messages.at(dim).sender; auto m = sess.messages.at(dim).content; if (sender) { wattron(win, A_BOLD); } mvwprintw(win, start + 1, 1, m.c_str()); wattroff(win, A_BOLD); } draw_borders(); }
int main(int argc, char *argv[]) { suppress_zombies(); struct sockaddr_in server_addr = create_server_addr(PORT); int listen_fd = create_listened_socket(server_addr); print_starting_message(server_addr); while (1) { struct sockaddr_in client_addr; socklen_t len = sizeof(client_addr); int connection_fd = safe_accept(listen_fd, (struct sockaddr *) &client_addr, &len); pid_t pid; if ((pid = fork()) == 0) { /* child */ close(listen_fd); server_main(connection_fd); close(connection_fd); exit(EXIT_SUCCESS); } /* parent */ close(connection_fd); } }