本文整理汇总了C++中LocalUser::WriteNumeric方法的典型用法代码示例。如果您正苦于以下问题:C++ LocalUser::WriteNumeric方法的具体用法?C++ LocalUser::WriteNumeric怎么用?C++ LocalUser::WriteNumeric使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LocalUser
的用法示例。
在下文中一共展示了LocalUser::WriteNumeric方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Handle
CmdResult Handle (const std::vector<std::string> ¶meters, User *user)
{
User* u = ServerInstance->FindNick(parameters[0]);
Channel* c = ServerInstance->FindChan(parameters[1]);
if ((!c) || (!u) || (u->registered != REG_ALL))
{
if (!c)
{
user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick.c_str(), parameters[1].c_str());
}
else
{
user->WriteNumeric(401, "%s %s :No such nick/channel",user->nick.c_str(), parameters[0].c_str());
}
return CMD_FAILURE;
}
if (IS_LOCAL(user))
{
if (c->GetPrefixValue(user) < HALFOP_VALUE)
{
user->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You must be a channel %soperator", user->nick.c_str(), c->name.c_str(), c->GetPrefixValue(u) == HALFOP_VALUE ? "" : "half-");
return CMD_FAILURE;
}
}
/* Servers remember invites only for their local users, so act
* only if the target is local. Otherwise the command will be
* passed to the target users server.
*/
LocalUser* lu = IS_LOCAL(u);
if (lu)
{
irc::string xname(c->name.c_str());
if (!lu->IsInvited(xname))
{
user->SendText(":%s 505 %s %s %s :Is not invited to channel %s", user->server.c_str(), user->nick.c_str(), u->nick.c_str(), c->name.c_str(), c->name.c_str());
return CMD_FAILURE;
}
user->SendText(":%s 494 %s %s %s :Uninvited", user->server.c_str(), user->nick.c_str(), c->name.c_str(), u->nick.c_str());
lu->RemoveInvite(xname);
lu->WriteNumeric(493, "%s :You were uninvited from %s by %s", u->nick.c_str(), c->name.c_str(), user->nick.c_str());
std::string msg = "*** " + user->nick + " uninvited " + u->nick + ".";
c->WriteChannelWithServ(ServerInstance->Config->ServerName, "NOTICE " + c->name + " :" + msg);
ServerInstance->PI->SendChannelNotice(c, 0, msg);
}
return CMD_SUCCESS;
}
示例2: SendAlert
void SendAlert(unsigned int numeric, const std::string& nick)
{
const IRCv3::Monitor::WatcherList* list = manager.GetWatcherList(nick);
if (!list)
return;
for (IRCv3::Monitor::WatcherList::const_iterator i = list->begin(); i != list->end(); ++i)
{
LocalUser* curr = *i;
curr->WriteNumeric(numeric, nick);
}
}
示例3: SendAlert
void SendAlert(User* user, const std::string& nick, unsigned int numeric, const char* numerictext, time_t shownts)
{
const IRCv3::Monitor::WatcherList* list = manager.GetWatcherList(nick);
if (!list)
return;
Numeric::Numeric num(numeric);
num.push(nick).push(user->ident).push(user->GetDisplayedHost()).push(ConvToStr(shownts)).push(numerictext);
for (IRCv3::Monitor::WatcherList::const_iterator i = list->begin(); i != list->end(); ++i)
{
LocalUser* curr = *i;
curr->WriteNumeric(num);
}
}
示例4: Handle
CmdResult Handle (const std::vector<std::string> ¶meters, User *user)
{
int n_done = 0;
reason = (parameters.size() < 4) ? "Please use this server/port instead" : parameters[3];
bool redirect_all_immediately = false;
redirect_new_users = true;
bool direction = true;
std::string n_done_s;
/* No parameters: jumpserver disabled */
if (!parameters.size())
{
if (port)
user->WriteNotice("*** Disabled jumpserver (previously set to '" + redirect_to + ":" + ConvToStr(port) + "')");
else
user->WriteNotice("*** Jumpserver was not enabled.");
port = 0;
sslport = 0;
redirect_to.clear();
return CMD_SUCCESS;
}
port = 0;
redirect_to.clear();
if (parameters.size() >= 3)
{
for (std::string::const_iterator n = parameters[2].begin(); n != parameters[2].end(); ++n)
{
switch (*n)
{
case '+':
direction = true;
break;
case '-':
direction = false;
break;
case 'a':
redirect_all_immediately = direction;
break;
case 'n':
redirect_new_users = direction;
break;
default:
user->WriteNotice("*** Invalid JUMPSERVER flag: " + ConvToStr(*n));
return CMD_FAILURE;
break;
}
}
size_t delimpos = parameters[1].find(':');
port = ConvToInt(parameters[1].substr(0, delimpos ? delimpos : std::string::npos));
sslport = (delimpos == std::string::npos ? 0 : ConvToInt(parameters[1].substr(delimpos + 1)));
if (parameters[1].find_first_not_of("0123456789:") != std::string::npos
|| parameters[1].rfind(':') != delimpos
|| port > 65535 || sslport > 65535)
{
user->WriteNotice("*** Invalid port number");
return CMD_FAILURE;
}
if (redirect_all_immediately)
{
/* Redirect everyone but the oper sending the command */
for (LocalUserList::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); ++i)
{
LocalUser* t = *i;
if (!t->IsOper())
{
t->WriteNumeric(10, "%s %s %d :Please use this Server/Port instead", t->nick.c_str(), parameters[0].c_str(), GetPort(t));
ServerInstance->Users->QuitUser(t, reason);
n_done++;
}
}
if (n_done)
{
n_done_s = ConvToStr(n_done);
}
}
if (redirect_new_users)
redirect_to = parameters[0];
user->WriteNotice("*** Set jumpserver to server '" + parameters[0] + "' port '" + (port ? ConvToStr(port) : "Auto") + ", SSL " + (sslport ? ConvToStr(sslport) : "Auto") + "', flags '+" +
(redirect_all_immediately ? "a" : "") + (redirect_new_users ? "n'" : "'") +
(n_done ? " (" + n_done_s + "user(s) redirected): " : ": ") + reason);
}
return CMD_SUCCESS;
}
示例5: AddUser
/* add a client connection to the sockets list */
void UserManager::AddUser(int socket, ListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server)
{
/* NOTE: Calling this one parameter constructor for User automatically
* allocates a new UUID and places it in the hash_map.
*/
LocalUser* New = NULL;
try
{
New = new LocalUser(socket, client, server);
}
catch (...)
{
ServerInstance->Logs->Log("USERS", LOG_DEFAULT, "*** WTF *** Duplicated UUID! -- Crack smoking monkeys have been unleashed.");
ServerInstance->SNO->WriteToSnoMask('a', "WARNING *** Duplicate UUID allocated!");
return;
}
UserIOHandler* eh = &New->eh;
// If this listener has an IO hook provider set then tell it about the connection
if (via->iohookprov)
via->iohookprov->OnAccept(eh, client, server);
ServerInstance->Logs->Log("USERS", LOG_DEBUG, "New user fd: %d", socket);
this->unregistered_count++;
/* The users default nick is their UUID */
New->nick = New->uuid;
this->clientlist[New->nick] = New;
New->registered = REG_NONE;
New->signon = ServerInstance->Time();
New->lastping = 1;
this->AddClone(New);
this->local_users.push_front(New);
if (this->local_users.size() > ServerInstance->Config->SoftLimit)
{
ServerInstance->SNO->WriteToSnoMask('a', "Warning: softlimit value has been reached: %d clients", ServerInstance->Config->SoftLimit);
this->QuitUser(New,"No more connections allowed");
return;
}
/*
* First class check. We do this again in FullConnect after DNS is done, and NICK/USER is recieved.
* See my note down there for why this is required. DO NOT REMOVE. :) -- w00t
*/
New->SetClass();
/*
* Check connect class settings and initialise settings into User.
* This will be done again after DNS resolution. -- w00t
*/
New->CheckClass(ServerInstance->Config->CCOnConnect);
if (New->quitting)
return;
/*
* even with bancache, we still have to keep User::exempt current.
* besides that, if we get a positive bancache hit, we still won't fuck
* them over if they are exempt. -- w00t
*/
New->exempt = (ServerInstance->XLines->MatchesLine("E",New) != NULL);
BanCacheHit* const b = ServerInstance->BanCache.GetHit(New->GetIPString());
if (b)
{
if (!b->Type.empty() && !New->exempt)
{
/* user banned */
ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "BanCache: Positive hit for " + New->GetIPString());
if (!ServerInstance->Config->XLineMessage.empty())
New->WriteNumeric(ERR_YOUREBANNEDCREEP, ":" + ServerInstance->Config->XLineMessage);
this->QuitUser(New, b->Reason);
return;
}
else
{
ServerInstance->Logs->Log("BANCACHE", LOG_DEBUG, "BanCache: Negative hit for " + New->GetIPString());
}
}
else
{
if (!New->exempt)
{
XLine* r = ServerInstance->XLines->MatchesLine("Z",New);
if (r)
{
r->Apply(New);
return;
}
}
}
if (!SocketEngine::AddFd(eh, FD_WANT_FAST_READ | FD_WANT_EDGE_WRITE))
{
//.........这里部分代码省略.........