本文整理汇总了C++中WUser::FixUp方法的典型用法代码示例。如果您正苦于以下问题:C++ WUser::FixUp方法的具体用法?C++ WUser::FixUp怎么用?C++ WUser::FixUp使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WUser
的用法示例。
在下文中一共展示了WUser::FixUp方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: reset_files
void reset_files() {
WUser user;
WStatus* pStatus = GetApplication()->GetStatusManager()->BeginTransaction();
pStatus->SetNumUsers(0);
GetSession()->bout.NewLine();
int nNumUsers = GetApplication()->GetUserManager()->GetNumberOfUserRecords();
WFile userFile(syscfg.datadir, USER_LST);
if (userFile.Open(WFile::modeBinary | WFile::modeReadWrite)) {
for (int i = 1; i <= nNumUsers; i++) {
long pos = static_cast<long>(syscfg.userreclen) * static_cast<long>(i);
userFile.Seek(pos, WFile::seekBegin);
userFile.Read(&user.data, syscfg.userreclen);
if (!user.IsUserDeleted()) {
user.FixUp();
if (isr1(i, nNumUsers, user.GetName())) {
pStatus->IncrementNumUsers();
}
} else {
memset(&user.data, 0, syscfg.userreclen);
user.SetInactFlag(0);
user.SetInactFlag(inact_deleted);
}
userFile.Seek(pos, WFile::seekBegin);
userFile.Write(&user.data, syscfg.userreclen);
if ((i % 10) == 0) {
userFile.Close();
GetSession()->bout << i << "\r ";
userFile.Open(WFile::modeBinary | WFile::modeReadWrite);
}
}
userFile.Close();
}
GetSession()->bout << "\r\n\r\n";
WFile namesFile(syscfg.datadir, NAMES_LST);
if (!namesFile.Open(WFile::modeReadWrite | WFile::modeBinary | WFile::modeTruncate)) {
std::cout << namesFile.GetFullPathName() << " NOT FOUND" << std::endl;
GetApplication()->AbortBBS(true);
}
namesFile.Write(smallist, sizeof(smalrec) * pStatus->GetNumUsers());
namesFile.Close();
GetApplication()->GetStatusManager()->CommitTransaction(pStatus);
}
示例2: Execute
int FixUsersCommand::Execute() {
std::cout << "Runnning FixUsersCommand::Execute" << std::endl;
File userFile(syscfg.datadir, USER_LST);
if(!userFile.Exists()) {
Print(NOK, true, "%s does not exist.", userFile.full_pathname().c_str());
giveUp();
}
WUserManager userMgr;
userMgr.InitializeUserManager(syscfg.datadir, sizeof(userrec), syscfg.maxusers);
Print(OK, true, "Checking USER.LST... found %d user records.", userMgr.GetNumberOfUserRecords());
Print(OK, true, "TBD: Check for trashed user recs.");
if(userMgr.GetNumberOfUserRecords() > syscfg.maxusers) {
Print(OK, true, "Might be too many.");
maybeGiveUp();
} else {
Print(OK, true, "Reasonable number.");
}
std::vector<smalrec> smallrecords;
std::set<std::string> names;
const int num_user_records = userMgr.GetNumberOfUserRecords();
for(int i = 1; i <= num_user_records; i++) {
WUser user;
userMgr.ReadUser(&user, i);
user.FixUp();
userMgr.WriteUser(&user, i);
if (!user.IsUserDeleted() && !user.IsUserInactive()) {
smalrec sr = { 0 };
strcpy((char*) sr.name, user.GetName());
sr.number = static_cast<unsigned short>(i);
std::string namestring((char*) sr.name);
if (names.find(namestring) == names.end()) {
smallrecords.push_back(sr);
names.insert(namestring);
const std::string msg = StringPrintf("Keeping user: %s #%d", sr.name, sr.number);
Print(OK, true, msg.c_str());
}
else {
std::cout << "[skipping duplicate user: " << namestring << " #" << sr.number << "]";
}
}
};
std::sort(smallrecords.begin(), smallrecords.end(), [](const smalrec& a, const smalrec& b) -> bool {
int equal = strcmp((char*)a.name, (char*)b.name);
// Sort by user number if names match.
if (equal == 0) {
return a.number < b.number;
}
// Otherwise sort by name comparison.
return equal < 0;
});
printf("size=%lu %lu\n", smallrecords.size(), sizeof(smalrec) * smallrecords.size());
Print(OK, true, "Checking NAMES.LST");
File nameFile(syscfg.datadir, NAMES_LST);
if(!nameFile.Exists()) {
Print(NOK, true, "%s does not exist, regenerating with %d names", nameFile.full_pathname().c_str(),
smallrecords.size());
nameFile.Close();
nameFile.Open(File::modeCreateFile | File::modeBinary | File::modeWriteOnly);
nameFile.Write(&smallrecords[0], sizeof(smalrec) * smallrecords.size());
nameFile.Close();
} else {
if(nameFile.Open(File::modeReadOnly | File::modeBinary)) {
unsigned long size = nameFile.GetLength();
unsigned short recs = static_cast<unsigned short>(size / sizeof(smalrec));
if (recs != status.users) {
status.users = recs;
Print(NOK, true, "STATUS.DAT contained an incorrect user count.");
} else {
Print(OK, true, "STATUS.DAT matches expected user count of %d users.", status.users);
}
}
nameFile.Close();
}
return 0;
}