--- lbbs/src/bbs_main.c 2025/06/07 08:33:08 1.65 +++ lbbs/src/bbs_main.c 2025/06/18 02:29:54 1.71 @@ -20,6 +20,7 @@ #include "user_priv.h" #include "common.h" #include "database.h" +#include "article_view_log.h" #include "log.h" #include "io.h" #include "screen.h" @@ -27,6 +28,7 @@ #include "bbs_cmd.h" #include "section_list.h" #include "trie_dict.h" +#include "editor.h" #include #include #include @@ -47,7 +49,6 @@ int bbs_welcome(void) u_int32_t u_online = 0; u_int32_t u_anonymous = 0; u_int32_t u_total = 0; - u_int32_t max_u_online = 0; u_int32_t u_login_count = 0; MYSQL *db; @@ -146,41 +147,21 @@ int bbs_welcome(void) mysql_close(db); - // Log max user_online - FILE *fin, *fout; - if ((fin = fopen(VAR_MAX_USER_ONLINE, "r")) != NULL) - { - fscanf(fin, "%d", &max_u_online); - fclose(fin); - } - if (u_online > max_u_online) - { - max_u_online = u_online; - if ((fout = fopen(VAR_MAX_USER_ONLINE, "w")) == NULL) - { - log_error("Open max_user_online.dat failed\n"); - return -3; - } - fprintf(fout, "%d\n", max_u_online); - fclose(fout); - } - // Count current user before login u_online++; u_anonymous++; // Display logo - display_file(DATA_WELCOME, 1, 2); + display_file(DATA_WELCOME, 2); // Display welcome message prints("\r\033[1;35m欢迎光临\033[33m 【 %s 】 \033[35mBBS\r\n" "\033[32m目前上站人数 [\033[36m%d/%d\033[32m] " "匿名游客[\033[36m%d\033[32m] " "注册用户数[\033[36m%d/%d\033[32m]\r\n" - "从 [\033[36m%s\033[32m] 起,最高人数记录:" - "[\033[36m%d\033[32m],累计访问人次:[\033[36m%d\033[32m]\033[m\r\n", + "从 [\033[36m%s\033[32m] 起,累计访问人次:[\033[36m%d\033[32m]\033[m\r\n", BBS_name, u_online, BBS_max_client, u_anonymous, u_total, - BBS_max_user, BBS_start_dt, max_u_online, u_login_count); + BBS_max_user, BBS_start_dt, u_login_count); iflush(); @@ -204,7 +185,7 @@ int bbs_logout(void) mysql_close(db); - display_file(DATA_GOODBYE, 1, 1); + display_file(DATA_GOODBYE, 1); log_common("User logout\n"); @@ -216,7 +197,7 @@ int bbs_center() int ch; time_t t_last_action; - BBS_last_access_tm = t_last_action = time(0); + BBS_last_access_tm = t_last_action = time(NULL); clearscr(); @@ -230,9 +211,9 @@ int bbs_center() { ch = igetch(100); - if (p_bbs_menu->choose_step == 0 && time(0) - t_last_action >= 10) + if (p_bbs_menu->choose_step == 0 && time(NULL) - t_last_action >= 10) { - t_last_action = time(0); + t_last_action = time(NULL); show_active_board(); show_bottom(""); @@ -240,12 +221,17 @@ int bbs_center() iflush(); } + if (user_online_update("MENU") < 0) + { + log_error("user_online_update(MENU) error\n"); + } + switch (ch) { case KEY_NULL: // broken pipe return 0; case KEY_TIMEOUT: - if (time(0) - BBS_last_access_tm >= MAX_DELAY_TIME) + if (time(NULL) - BBS_last_access_tm >= MAX_DELAY_TIME) { return 0; } @@ -258,7 +244,7 @@ int bbs_center() case EXITBBS: return 0; case REDRAW: - t_last_action = time(0); + t_last_action = time(NULL); clearscr(); show_top("", BBS_name, ""); show_active_board(); @@ -273,7 +259,7 @@ int bbs_center() iflush(); } - BBS_last_access_tm = time(0); + BBS_last_access_tm = time(NULL); } return 0; @@ -327,12 +313,24 @@ int bbs_main() goto cleanup; } - // Load article_view_log + // Load article view log + if (article_view_log_load(BBS_priv.uid, &BBS_article_view_log, 0) < 0) + { + log_error("article_view_log_load() error\n"); + goto cleanup; + } + + // Init editor memory pool + if (editor_memory_pool_init() < 0) + { + log_error("editor_memory_pool_init() error\n"); + goto cleanup; + } clearscr(); // BBS Top 10 - display_file(VAR_BBS_TOP, 1, 1); + display_file(VAR_BBS_TOP, 1); // Main bbs_center(); @@ -340,7 +338,19 @@ int bbs_main() // Logout bbs_logout(); + // Save incremental article view log + if (article_view_log_save_inc(&BBS_article_view_log) < 0) + { + log_error("article_view_log_save_inc() error\n"); + } + cleanup: + // Cleanup editor memory pool + editor_memory_pool_cleanup(); + + // Unload article view log + article_view_log_unload(&BBS_article_view_log); + // Detach menu in shared memory detach_menu_shm(p_bbs_menu); free(p_bbs_menu);