本文整理汇总了C++中LocalUser::FullConnect方法的典型用法代码示例。如果您正苦于以下问题:C++ LocalUser::FullConnect方法的具体用法?C++ LocalUser::FullConnect怎么用?C++ LocalUser::FullConnect使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LocalUser
的用法示例。
在下文中一共展示了LocalUser::FullConnect方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoBackgroundUserStuff
/**
* This function is called once a second from the mainloop.
* It is intended to do background checking on all the user structs, e.g.
* stuff like ping checks, registration timeouts, etc.
*/
void UserManager::DoBackgroundUserStuff()
{
/*
* loop over all local users..
*/
for (LocalUserList::iterator i = local_users.begin(); i != local_users.end(); ++i)
{
LocalUser* curr = *i;
if (curr->quitting)
continue;
if (curr->CommandFloodPenalty || curr->eh.getSendQSize())
{
unsigned int rate = curr->MyClass->GetCommandRate();
if (curr->CommandFloodPenalty > rate)
curr->CommandFloodPenalty -= rate;
else
curr->CommandFloodPenalty = 0;
curr->eh.OnDataReady();
}
switch (curr->registered)
{
case REG_ALL:
if (ServerInstance->Time() > curr->nping)
{
// This user didn't answer the last ping, remove them
if (!curr->lastping)
{
time_t time = ServerInstance->Time() - (curr->nping - curr->MyClass->GetPingTime());
const std::string message = "Ping timeout: " + ConvToStr(time) + (time == 1 ? " seconds" : " second");
this->QuitUser(curr, message);
continue;
}
curr->Write("PING :" + ServerInstance->Config->ServerName);
curr->lastping = 0;
curr->nping = ServerInstance->Time() + curr->MyClass->GetPingTime();
}
break;
case REG_NICKUSER:
if (AllModulesReportReady(curr))
{
/* User has sent NICK/USER, modules are okay, DNS finished. */
curr->FullConnect();
continue;
}
break;
}
if (curr->registered != REG_ALL && (ServerInstance->Time() > (curr->age + curr->MyClass->GetRegTimeout())))
{
/*
* registration timeout -- didnt send USER/NICK/HOST
* in the time specified in their connection class.
*/
this->QuitUser(curr, "Registration timeout");
continue;
}
}
}
示例2: DoBackgroundUserStuff
/**
* This function is called once a second from the mainloop.
* It is intended to do background checking on all the user structs, e.g.
* stuff like ping checks, registration timeouts, etc.
*/
void InspIRCd::DoBackgroundUserStuff()
{
/*
* loop over all local users..
*/
LocalUserList::reverse_iterator count2 = this->Users->local_users.rbegin();
while (count2 != this->Users->local_users.rend())
{
LocalUser *curr = *count2;
count2++;
if (curr->quitting)
continue;
if (curr->CommandFloodPenalty || curr->eh.getSendQSize())
{
unsigned int rate = curr->MyClass->GetCommandRate();
if (curr->CommandFloodPenalty > rate)
curr->CommandFloodPenalty -= rate;
else
curr->CommandFloodPenalty = 0;
curr->eh.OnDataReady();
}
switch (curr->registered)
{
case REG_ALL:
if (Time() > curr->nping)
{
// This user didn't answer the last ping, remove them
if (!curr->lastping)
{
time_t time = this->Time() - (curr->nping - curr->MyClass->GetPingTime());
char message[MAXBUF];
snprintf(message, MAXBUF, "Ping timeout: %ld second%s", (long)time, time > 1 ? "s" : "");
curr->lastping = 1;
curr->nping = Time() + curr->MyClass->GetPingTime();
this->Users->QuitUser(curr, message);
continue;
}
curr->Write("PING :%s",this->Config->ServerName.c_str());
curr->lastping = 0;
curr->nping = Time() +curr->MyClass->GetPingTime();
}
break;
case REG_NICKUSER:
if (AllModulesReportReady(curr))
{
/* User has sent NICK/USER, modules are okay, DNS finished. */
curr->FullConnect();
continue;
}
break;
}
if (curr->registered != REG_ALL && (Time() > (curr->age + curr->MyClass->GetRegTimeout())))
{
/*
* registration timeout -- didnt send USER/NICK/HOST
* in the time specified in their connection class.
*/
this->Users->QuitUser(curr, "Registration timeout");
continue;
}
}
}