--- lbbs/src/bbs_net.c 2005/03/21 18:14:00 1.6 +++ lbbs/src/bbs_net.c 2005/03/22 08:19:11 1.7 @@ -217,7 +217,6 @@ bbsnet_connect (int n) int sock, ch, result, len, loop; struct sockaddr_in sin; char buf[256]; - time_t now, t_last_action; fd_set inputs, testfds; struct timeval timeout; struct hostent *pHost = NULL; @@ -303,15 +302,15 @@ bbsnet_connect (int n) FD_SET (0, &inputs); FD_SET (sock, &inputs); - t_last_action = time (0); + BBS_last_access_tm = time (0); loop = 1; while (loop) { testfds = inputs; - timeout.tv_sec = 0; - timeout.tv_usec = 100000; + timeout.tv_sec = TIME_OUT; + timeout.tv_usec = 0; result = select (FD_SETSIZE, &testfds, (fd_set *) NULL, (fd_set *) NULL, &timeout); @@ -319,6 +318,10 @@ bbsnet_connect (int n) switch (result) { case 0: + if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME) + { + loop = 0; + } break; case -1: log_error ("select() error!\n"); @@ -345,10 +348,7 @@ bbsnet_connect (int n) write (1, buf, len); } break; - } - if (time (0) - t_last_action >= 10) - { - t_last_action = time (0); + BBS_last_access_tm = time (0); } } @@ -383,8 +383,7 @@ bbsnet_refresh () prints ("¨t¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨s"); moveto (23, 0); - prints - (" [\x1b[1;32mCtrl+C\x1b[m]Í˳ö"); + prints (" [\x1b[1;32mCtrl+C\x1b[m]Í˳ö"); iflush (); return 0; @@ -415,21 +414,15 @@ bbsnet_selchange (int new_pos) int bbs_net () { - int ch, result, pos, i; + int ch, pos, i; char file_config[256]; - time_t t_last_action; - fd_set inputs, testfds; - struct timeval timeout; strcpy (file_config, app_home_dir); strcat (file_config, "conf/bbsnet.conf"); load_bbsnet_conf (file_config); - FD_ZERO (&inputs); - FD_SET (0, &inputs); - - t_last_action = time (0); + BBS_last_access_tm = time (0); clearscr (); bbsnet_refresh (); @@ -439,70 +432,54 @@ bbs_net () while (1) { - testfds = inputs; - timeout.tv_sec = 0; - timeout.tv_usec = 100000; - - result = select (FD_SETSIZE, &testfds, (fd_set *) NULL, - (fd_set *) NULL, &timeout); - switch (result) + ch = igetch (); + switch (ch) { - case 0: + case KEY_NULL: + case Ctrl ('C'): + return 0; + case KEY_TIMEOUT: + if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME) + { + return -1; + } + continue; + case CR: + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_connect (pos); + bbsnet_refresh (); + display_current_menu (&bbsnet_menu); + bbsnet_selchange (pos); break; - case -1: - log_error ("select() error!\n"); + case KEY_UP: + for (i = 0; i < STATION_PER_LINE; i++) + menu_control (&bbsnet_menu, KEY_UP); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_DOWN: + for (i = 0; i < STATION_PER_LINE; i++) + menu_control (&bbsnet_menu, KEY_DOWN); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_LEFT: + menu_control (&bbsnet_menu, KEY_UP); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); + break; + case KEY_RIGHT: + menu_control (&bbsnet_menu, KEY_DOWN); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); break; default: - if (FD_ISSET (0, &testfds)) - { - ch = igetch (); - switch (ch) - { - case KEY_NULL: - case Ctrl ('C'): - return 0; - case CR: - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_connect (pos); - bbsnet_refresh (); - display_current_menu (&bbsnet_menu); - bbsnet_selchange (pos); - break; - case KEY_UP: - for (i = 0; i < STATION_PER_LINE; i++) - menu_control (&bbsnet_menu, KEY_UP); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_DOWN: - for (i = 0; i < STATION_PER_LINE; i++) - menu_control (&bbsnet_menu, KEY_DOWN); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_LEFT: - menu_control (&bbsnet_menu, KEY_UP); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - case KEY_RIGHT: - menu_control (&bbsnet_menu, KEY_DOWN); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - default: - menu_control (&bbsnet_menu, ch); - pos = bbsnet_menu.p_menu[0]->item_cur_pos; - bbsnet_selchange (pos); - break; - } - } + menu_control (&bbsnet_menu, ch); + pos = bbsnet_menu.p_menu[0]->item_cur_pos; + bbsnet_selchange (pos); break; } - if (time (0) - t_last_action >= 10) - { - t_last_action = time (0); - } + BBS_last_access_tm = time (0); } return 0;