void UsersMngDialog::ShowAllUsers() { // Lock users manager for reading. mc::IReadWriteLock::Reader_ locker(RemotePC::UsersManager::Instance().GetLock()); size_t usersCount = RemotePC::UsersManager::Instance().GetUsersCount(); for ( size_t i = 0 ; i < usersCount ; ++i ) { RemotePC::User& user = RemotePC::UsersManager::Instance().GetUser(i); ShowUser(QString(user.GetDeviceName().c_str()), user.GetCookie()); } }
/******************************************************************* * Dispatch command according to $type, $tag in skin tags * *******************************************************************/ void DoTagCommand(char *type, char *tag) { if (!strcasecmp(type, "Post")) { ShowPost(tag, &c_board, post_file); } else if (!strcasecmp(type, "PostList")) { ShowPostList(tag, &c_board, post_file); } else if (!strcasecmp(type, "User")) { ShowUser(tag, &curuser); } else if (!strcasecmp(type, "UserList")) { ShowUserList(tag, post_file); } else if (!strcasecmp(type, "Mail")) { ShowMail(tag); } else if (!strcasecmp(type, "Board")) { ShowBoard(tag, &c_board, post_file); } else if (!strcasecmp(type, "BoardList")) { ShowBoardList(tag, post_file); } else if (!strcasecmp(type, "SubDir")) { fprintf(fp_out, "/%s", BBS_SUBDIR); } else if (!strcasecmp(type, "Message")) { fprintf(fp_out, "%s", WEBBBS_ERROR_MESSAGE); } else if (!strcasecmp(type, "Server")) { ShowServerInfo(tag, server, request_rec, file_shm, html_shm); } else if (!strcasecmp(type, "Proxy")) { if (strlen(request_rec->via)) { char proxy[STRLEN * 2]; xstrncpy(proxy, request_rec->via + 4, sizeof(proxy)); strtok(proxy, ",("); fprintf(fp_out, "%s", proxy); } } else if (!strcasecmp(type, "Skin")) { if (PSCorrect == Correct && (c_board.brdtype & BRD_WEBSKIN) && (!strcmp(username, c_board.owner) || HAS_PERM(PERM_SYSOP))) { fprintf(fp_out, "<a href=\"/%sboards/%s/%s\">[BM]修改看板介面</a>", BBS_SUBDIR, c_board.filename, HTML_SkinModify); } } else if (!strcasecmp(type, "Announce")) { ShowArticle(WELCOME, FALSE, TRUE); } else if (!strcasecmp(type, "NewGuide")) { ShowArticle(NEWGUIDE, FALSE, TRUE); } }
//void newProcessForClient(int conn_fd, struct sockaddr_in serv_addr, struct OnlineUser * userlist) void newPthreadForClient(int * conn_fd) { char buf[500]; char recvfrom[10]; char message[500]; char sendto[10]; int i, j; int stat; int CONN_FD; struct UserInfo user; struct Package package; int send_to_fd; char oder[20]; CONN_FD = *conn_fd; printf("##server : now is newProcessForClient \n##Waiting for Log in\n"); printf("##server : conn_fd : %d\n", CONN_FD); if(recv(CONN_FD, &user,sizeof(user), 0) == 0) { pthread_exit(0); } printf("##server : received %d\n", user.flag); printf("##server : received %s\n", user.name); printf("##server : received %s\n", user.passwd); if(user.flag == 1) { //登陆 signIn stat = SignIn(CONN_FD,user); printf("stat = %d\n", stat); if(stat == 1) { AddUser(user.name,CONN_FD); ShowUser(); send(CONN_FD, &stat, sizeof(stat), 0); } else { send(CONN_FD, &stat, sizeof(stat), 0); pthread_exit(0); } } if(user.flag == 2) { //注册signUp SignUp(CONN_FD, user); pthread_exit(0); } // strcpy(recvfrom , user.name); OnLineHint(user.name); while(1) { //解析信息 printf("##server : waitting for massage form %s\n", user.name); memset(buf, 0, sizeof(buf)); if(recv(CONN_FD, &package, sizeof(package), 0) == 0) { printf("%s off line\n", user.name); OffLine(user.name); pthread_exit(0); } //下线 if(package.order == 1 && strcmp(package.sendto, "all") == 0) { SendToAll(package); printf("now is send all\n"); continue; } send_to_fd = find_fd(package.sendto); if(package.order == 1) { if(send_to_fd == -1) { continue; } if(send(send_to_fd, &package, sizeof(package), 0) == 0) { printf("send error\n"); continue; } } if(package.order == 2) { if(strcmp(package.message, "show") == 0) { ShowOnlineUser(CONN_FD); } } } }
void UsersMngDialog::AddUser(size_t userCookie) { RemotePC::User& user = RemotePC::UsersManager::Instance().GetUserByCookie(userCookie); ShowUser(QString(user.GetDeviceName().c_str()), user.GetCookie()); }