Exemple #1
0
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);
    }
}