/[LeafOK_CVS]/lbbs/src/bbs_net.c
ViewVC logotype

Diff of /lbbs/src/bbs_net.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.4 by sysadm, Mon Mar 21 17:52:09 2005 UTC Revision 1.7 by sysadm, Tue Mar 22 08:19:11 2005 UTC
# Line 92  load_bbsnet_conf (const char *file_confi Line 92  load_bbsnet_conf (const char *file_confi
92        p_menuitem->name[0] =        p_menuitem->name[0] =
93          (item_count < MAXSTATION / 2 ? 'A' + item_count : 'a' + item_count);          (item_count < MAXSTATION / 2 ? 'A' + item_count : 'a' + item_count);
94        p_menuitem->name[1] = '\0';        p_menuitem->name[1] = '\0';
95        sprintf (p_menuitem->text, "1;36m%c. %s",        sprintf (p_menuitem->text, "%c. %s",
96                 p_menuitem->name[0], bbsnet_conf[item_count].host1);                 p_menuitem->name[0], bbsnet_conf[item_count].host1);
97    
98        item_count++;        item_count++;
# Line 217  bbsnet_connect (int n) Line 217  bbsnet_connect (int n)
217    int sock, ch, result, len, loop;    int sock, ch, result, len, loop;
218    struct sockaddr_in sin;    struct sockaddr_in sin;
219    char buf[256];    char buf[256];
   time_t now, t_last_action;  
220    fd_set inputs, testfds;    fd_set inputs, testfds;
221    struct timeval timeout;    struct timeval timeout;
222    struct hostent *pHost = NULL;    struct hostent *pHost = NULL;
# Line 303  bbsnet_connect (int n) Line 302  bbsnet_connect (int n)
302    FD_SET (0, &inputs);    FD_SET (0, &inputs);
303    FD_SET (sock, &inputs);    FD_SET (sock, &inputs);
304    
305    t_last_action = time (0);    BBS_last_access_tm = time (0);
306    
307    loop = 1;    loop = 1;
308    
309    while (loop)    while (loop)
310      {      {
311        testfds = inputs;        testfds = inputs;
312        timeout.tv_sec = 0;        timeout.tv_sec = TIME_OUT;
313        timeout.tv_usec = 100000;        timeout.tv_usec = 0;
314    
315        result = select (FD_SETSIZE, &testfds, (fd_set *) NULL,        result = select (FD_SETSIZE, &testfds, (fd_set *) NULL,
316                         (fd_set *) NULL, &timeout);                         (fd_set *) NULL, &timeout);
# Line 319  bbsnet_connect (int n) Line 318  bbsnet_connect (int n)
318        switch (result)        switch (result)
319          {          {
320          case 0:          case 0:
321              if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME)
322                {
323                  loop = 0;
324                }
325            break;            break;
326          case -1:          case -1:
327            log_error ("select() error!\n");            log_error ("select() error!\n");
# Line 345  bbsnet_connect (int n) Line 348  bbsnet_connect (int n)
348                write (1, buf, len);                write (1, buf, len);
349              }              }
350            break;            break;
351          }            BBS_last_access_tm = time (0);
       if (time (0) - t_last_action >= 10)  
         {  
           t_last_action = time (0);  
352          }          }
353      }      }
354    
# Line 383  bbsnet_refresh () Line 383  bbsnet_refresh ()
383    prints    prints
384      ("¨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");      ("¨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");
385    moveto (23, 0);    moveto (23, 0);
386    prints    prints (" [\x1b[1;32mCtrl+C\x1b[m]Í˳ö");
     (" [\x1b[1;32mCtrl+C\x1b[m]Í˳ö");  
387    iflush ();    iflush ();
388    
389    return 0;    return 0;
# Line 415  bbsnet_selchange (int new_pos) Line 414  bbsnet_selchange (int new_pos)
414  int  int
415  bbs_net ()  bbs_net ()
416  {  {
417    int ch, result, pos, i;    int ch, pos, i;
418    char file_config[256];    char file_config[256];
   time_t t_last_action;  
   fd_set inputs, testfds;  
   struct timeval timeout;  
419    
420    strcpy (file_config, app_home_dir);    strcpy (file_config, app_home_dir);
421    strcat (file_config, "conf/bbsnet.conf");    strcat (file_config, "conf/bbsnet.conf");
422    
423    load_bbsnet_conf (file_config);    load_bbsnet_conf (file_config);
424    
425    FD_ZERO (&inputs);    BBS_last_access_tm = time (0);
   FD_SET (0, &inputs);  
   
   t_last_action = time (0);  
426    
427    clearscr ();    clearscr ();
428    bbsnet_refresh ();    bbsnet_refresh ();
# Line 439  bbs_net () Line 432  bbs_net ()
432    
433    while (1)    while (1)
434      {      {
435        testfds = inputs;        ch = igetch ();
436        timeout.tv_sec = 0;        switch (ch)
       timeout.tv_usec = 100000;  
   
       result = select (FD_SETSIZE, &testfds, (fd_set *) NULL,  
                        (fd_set *) NULL, &timeout);  
       switch (result)  
437          {          {
438          case 0:          case KEY_NULL:
439            case Ctrl ('C'):
440              return 0;
441            case KEY_TIMEOUT:
442              if (time (0) - BBS_last_access_tm >= MAX_DELAY_TIME)
443                {
444                  return -1;
445                }
446              continue;
447            case CR:
448              pos = bbsnet_menu.p_menu[0]->item_cur_pos;
449              bbsnet_connect (pos);
450              bbsnet_refresh ();
451              display_current_menu (&bbsnet_menu);
452              bbsnet_selchange (pos);
453            break;            break;
454          case -1:          case KEY_UP:
455            log_error ("select() error!\n");            for (i = 0; i < STATION_PER_LINE; i++)
456                menu_control (&bbsnet_menu, KEY_UP);
457              pos = bbsnet_menu.p_menu[0]->item_cur_pos;
458              bbsnet_selchange (pos);
459              break;
460            case KEY_DOWN:
461              for (i = 0; i < STATION_PER_LINE; i++)
462                menu_control (&bbsnet_menu, KEY_DOWN);
463              pos = bbsnet_menu.p_menu[0]->item_cur_pos;
464              bbsnet_selchange (pos);
465              break;
466            case KEY_LEFT:
467              menu_control (&bbsnet_menu, KEY_UP);
468              pos = bbsnet_menu.p_menu[0]->item_cur_pos;
469              bbsnet_selchange (pos);
470              break;
471            case KEY_RIGHT:
472              menu_control (&bbsnet_menu, KEY_DOWN);
473              pos = bbsnet_menu.p_menu[0]->item_cur_pos;
474              bbsnet_selchange (pos);
475            break;            break;
476          default:          default:
477            if (FD_ISSET (0, &testfds))            menu_control (&bbsnet_menu, ch);
478              {            pos = bbsnet_menu.p_menu[0]->item_cur_pos;
479                ch = igetch ();            bbsnet_selchange (pos);
               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:  
                   break;  
                 }  
             }  
480            break;            break;
481          }          }
482        if (time (0) - t_last_action >= 10)        BBS_last_access_tm = time (0);
         {  
           t_last_action = time (0);  
         }  
483      }      }
484    
485    return 0;    return 0;


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1