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

Diff of /lbbs/src/user_list.c

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

Revision 1.8 by sysadm, Wed Oct 22 07:16:48 2025 UTC Revision 1.10 by sysadm, Wed Oct 22 10:38:23 2025 UTC
# Line 106  static int user_info_index_uid_comp(cons Line 106  static int user_info_index_uid_comp(cons
106          {          {
107                  return 1;                  return 1;
108          }          }
109            else if (p1->id < p2->id)
110            {
111                    return -1;
112            }
113            else if (p1->id > p2->id)
114            {
115                    return 1;
116            }
117          return 0;          return 0;
118  }  }
119    
# Line 116  int user_list_load(MYSQL *db, USER_LIST Line 124  int user_list_load(MYSQL *db, USER_LIST
124          char sql[SQL_BUFFER_LEN];          char sql[SQL_BUFFER_LEN];
125          int ret = 0;          int ret = 0;
126          int i;          int i;
127            int32_t last_uid = -1;
128    
129          if (db == NULL || p_list == NULL)          if (db == NULL || p_list == NULL)
130          {          {
# Line 123  int user_list_load(MYSQL *db, USER_LIST Line 132  int user_list_load(MYSQL *db, USER_LIST
132                  return -1;                  return -1;
133          }          }
134    
135            if (p_list->user_count > 0)
136            {
137                    last_uid = p_list->users[p_list->user_count - 1].uid;
138            }
139    
140          snprintf(sql, sizeof(sql),          snprintf(sql, sizeof(sql),
141                           "SELECT user_list.UID AS UID, username, nickname, gender, gender_pub, life, exp, "                           "SELECT user_list.UID AS UID, username, nickname, gender, gender_pub, life, exp, "
142                           "UNIX_TIMESTAMP(signup_dt), UNIX_TIMESTAMP(last_login_dt), UNIX_TIMESTAMP(birthday) "                           "UNIX_TIMESTAMP(signup_dt), UNIX_TIMESTAMP(last_login_dt), UNIX_TIMESTAMP(birthday) "
# Line 176  int user_list_load(MYSQL *db, USER_LIST Line 190  int user_list_load(MYSQL *db, USER_LIST
190          mysql_free_result(rs);          mysql_free_result(rs);
191          rs = NULL;          rs = NULL;
192    
         p_list->user_count = i;  
   
193          // Sort index          // Sort index
194          qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);          if (i != p_list->user_count || p_list->users[i - 1].uid != last_uid) // Count of users changed
195            {
196                    qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);
197    #ifdef _DEBUG
198                    log_error("Rebuild index of %d users, last_uid=%d\n", i, p_list->users[i - 1].uid);
199    #endif
200            }
201    
202            p_list->user_count = i;
203    
204  #ifdef _DEBUG  #ifdef _DEBUG
205          log_error("Loaded %d users\n", p_list->user_count);          log_error("Loaded %d users\n", p_list->user_count);
# Line 208  int user_online_list_load(MYSQL *db, USE Line 228  int user_online_list_load(MYSQL *db, USE
228          snprintf(sql, sizeof(sql),          snprintf(sql, sizeof(sql),
229                           "SELECT SID, UID, ip, current_action, UNIX_TIMESTAMP(login_tm), "                           "SELECT SID, UID, ip, current_action, UNIX_TIMESTAMP(login_tm), "
230                           "UNIX_TIMESTAMP(last_tm) FROM user_online "                           "UNIX_TIMESTAMP(last_tm) FROM user_online "
231                           "WHERE last_tm >= SUBDATE(NOW(), INTERVAL %d SECOND) "                           "WHERE last_tm >= SUBDATE(NOW(), INTERVAL %d SECOND) AND UID <> 0 "
232                           "ORDER BY last_tm DESC",                           "ORDER BY last_tm DESC",
233                           BBS_user_off_line);                           BBS_user_off_line);
234    
# Line 238  int user_online_list_load(MYSQL *db, USE Line 258  int user_online_list_load(MYSQL *db, USE
258                          log_error("query_user_info(%d) error\n", atoi(row[1]));                          log_error("query_user_info(%d) error\n", atoi(row[1]));
259                          continue;                          continue;
260                  }                  }
261                  else if (ret == 0) // Guest                  else if (ret == 0) // skip Guest
262                  {                  {
263                          p_list->users[i].user_info.id = -1;                          continue;
                         p_list->users[i].user_info.uid = 0;  
                         strncpy(p_list->users[i].user_info.username, "guest", sizeof(p_list->users[i].user_info.username) - 1);  
                         p_list->users[i].user_info.username[sizeof(p_list->users[i].user_info.username) - 1] = '\0';  
                         strncpy(p_list->users[i].user_info.nickname, "Guest", sizeof(p_list->users[i].user_info.nickname) - 1);  
                         p_list->users[i].user_info.nickname[sizeof(p_list->users[i].user_info.nickname) - 1] = '\0';  
                         p_list->users[i].user_info.gender = 'M';  
                         p_list->users[i].user_info.gender_pub = 0;  
                         p_list->users[i].user_info.life = 150;  
                         p_list->users[i].user_info.exp = 0;  
                         p_list->users[i].user_info.signup_dt = 0;  
                         p_list->users[i].user_info.last_login_dt = 0;  
                         p_list->users[i].user_info.birthday = 0;  
264                  }                  }
265    
266                  strncpy(p_list->users[i].ip, row[2], sizeof(p_list->users[i].ip) - 1);                  strncpy(p_list->users[i].ip, row[2], sizeof(p_list->users[i].ip) - 1);
# Line 275  int user_online_list_load(MYSQL *db, USE Line 283  int user_online_list_load(MYSQL *db, USE
283                  p_list->users[i].login_tm = (row[4] == NULL ? 0 : atol(row[4]));                  p_list->users[i].login_tm = (row[4] == NULL ? 0 : atol(row[4]));
284                  p_list->users[i].last_tm = (row[5] == NULL ? 0 : atol(row[5]));                  p_list->users[i].last_tm = (row[5] == NULL ? 0 : atol(row[5]));
285    
286                    // index
287                    p_list->index_uid[i].uid = p_list->users[i].user_info.uid;
288                    p_list->index_uid[i].id = i;
289    
290                  i++;                  i++;
291                  if (i >= BBS_max_user_online_count)                  if (i >= BBS_max_user_online_count)
292                  {                  {
# Line 285  int user_online_list_load(MYSQL *db, USE Line 297  int user_online_list_load(MYSQL *db, USE
297          mysql_free_result(rs);          mysql_free_result(rs);
298          rs = NULL;          rs = NULL;
299    
300            // Sort index
301            if (i > 0)
302            {
303                    qsort(p_list->index_uid, (size_t)i, sizeof(USER_INFO_INDEX_UID), user_info_index_uid_comp);
304    #ifdef _DEBUG
305                    log_error("Rebuild index of %d online users\n", i);
306    #endif
307            }
308    
309          p_list->user_count = i;          p_list->user_count = i;
310    
311  #ifdef _DEBUG  #ifdef _DEBUG
312          log_error("Loaded %d users\n", p_list->user_count);          log_error("Loaded %d online users\n", p_list->user_count);
313  #endif  #endif
314    
315  cleanup:  cleanup:
# Line 491  int user_list_pool_reload(int online_use Line 512  int user_list_pool_reload(int online_use
512                          log_error("user_online_list_load() error\n");                          log_error("user_online_list_load() error\n");
513                          return -2;                          return -2;
514                  }                  }
515    
516                    // No online user, no need to swap lists
517                    if (p_user_list_pool->p_online_current->user_count == 0 && p_user_list_pool->p_online_new->user_count == 0)
518                    {
519                            return 0;
520                    }
521          }          }
522          else          else
523          {          {


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

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