void net_loop (int flags, int (*is_end)(void)) { while (!is_end ()) { uSleep(10000); struct pollfd fds[101]; int cc = 0; if (flags & 3) { fds[0].fd = 0; fds[0].events = POLLIN; cc ++; } write_state_file (); int x = connections_make_poll_array (fds + cc, 101 - cc) + cc; double timer = next_timer_in (); if (timer > 1000) { timer = 1000; } if (poll (fds, x, timer) < 0) { work_timers (); continue; } work_timers (); if ((flags & 3) && (fds[0].revents & POLLIN)) { unread_messages = 0; if (flags & 1) { // rl_callback_read_char (); qthreadExec(); } else { char *line = 0; size_t len = 0; assert (getline (&line, &len, stdin) >= 0); got_it (line, strlen (line)); } } connections_poll_result (fds + cc, x - cc); #ifdef USE_LUA lua_do_all (); #endif if (safe_quit && !queries_num) { printf ("All done. Exit\n"); qthreadExitRequest (0); } if (unknown_user_list_pos) { do_get_user_list_info_silent (unknown_user_list_pos, unknown_user_list); unknown_user_list_pos = 0; } } }
void net_loop (int flags, int (*is_end)(void)) { while (!is_end ()) { struct pollfd fds[101]; int cc = 0; if (flags & 1) { fds[0].fd = 0; fds[0].events = POLLIN; cc ++; } int x = connections_make_poll_array (fds + cc, 101 - cc) + cc; double timer = next_timer_in (); if (timer > 1000) { timer = 1000; } if (poll (fds, x, timer) < 0) { /* resuming from interrupt, so not an error situation, this generally happens when you suspend your messenger with "C-z" and then "fg". This is allowed " */ if (flags & 1) { rl_reset_line_state (); rl_forced_update_display (); } work_timers (); continue; } work_timers (); if ((flags & 1) && (fds[0].revents & POLLIN)) { unread_messages = 0; rl_callback_read_char (); } connections_poll_result (fds + cc, x - cc); if (unknown_user_list_pos) { do_get_user_list_info_silent (unknown_user_list_pos, unknown_user_list); unknown_user_list_pos = 0; } } }
void net_loop (int flags, int (*is_end)(void)) { while (!is_end ()) { struct pollfd fds[101]; int cc = 0; if (flags & 3) { fds[0].fd = 0; fds[0].events = POLLIN; cc ++; } write_state_file (); int x = connections_make_poll_array (fds + cc, 101 - cc) + cc; double timer = next_timer_in (); if (timer > 1000) { timer = 1000; } if (poll (fds, x, timer) < 0) { work_timers (); continue; } work_timers (); if ((flags & 3) && (fds[0].revents & POLLIN)) { unread_messages = 0; if (flags & 1) { rl_callback_read_char (); } else { char *line = 0; size_t len = 0; assert (getline (&line, &len, stdin) >= 0); got_it (line, strlen (line)); } } connections_poll_result (fds + cc, x - cc); if (unknown_user_list_pos) { do_get_user_list_info_silent (unknown_user_list_pos, unknown_user_list); unknown_user_list_pos = 0; } } }