From: brain Date: Sun, 1 Jun 2008 14:18:07 +0000 (+0000) Subject: Add ProtocolInterface::Introduce() to prevent confusion over event ordering, and... X-Git-Tag: v2.0.23~3076 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=ada434820d2d81d8e4bcf633ebcbfef20606b51c;p=user%2Fhenk%2Fcode%2Finspircd.git Add ProtocolInterface::Introduce() to prevent confusion over event ordering, and allow for more flexible protocol use git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9827 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/include/protocol.h b/include/protocol.h index 44013a1ca..87d4ea384 100644 --- a/include/protocol.h +++ b/include/protocol.h @@ -17,6 +17,7 @@ #include "hashcomp.h" class InspIRCd; +class User; typedef std::deque parameterlist; @@ -74,6 +75,8 @@ class ProtocolInterface : public Extensible virtual void SendUserNotice(User* target, const std::string &text) { } virtual void GetServerList(ProtoServerList &sl) { } + + virtual void Introduce(User* u) { } }; #endif diff --git a/src/modules/m_conn_join.cpp b/src/modules/m_conn_join.cpp index 046176b0c..606794d10 100644 --- a/src/modules/m_conn_join.cpp +++ b/src/modules/m_conn_join.cpp @@ -46,8 +46,8 @@ class ModuleConnJoin : public Module : Module(Me) { OnRehash(NULL, ""); - Implementation eventlist[] = { I_OnPostConnect, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 2); + Implementation eventlist[] = { I_OnPostConnect, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, 2); } void Prioritize() diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 585af8fe4..b91d76836 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -50,19 +50,19 @@ ModuleSpanningTree::ModuleSpanningTree(InspIRCd* Me) { I_OnPreCommand, I_OnGetServerDescription, I_OnUserInvite, I_OnPostLocalTopicChange, I_OnWallops, I_OnUserNotice, I_OnUserMessage, I_OnBackgroundTimer, - I_OnUserJoin, I_OnChangeHost, I_OnChangeName, I_OnUserPart, I_OnPostConnect, + I_OnUserJoin, I_OnChangeHost, I_OnChangeName, I_OnUserPart, I_OnUserQuit, I_OnUserPostNick, I_OnUserKick, I_OnRemoteKill, I_OnRehash, I_OnOper, I_OnAddLine, I_OnDelLine, I_ProtoSendMode, I_OnMode, I_OnStats, I_ProtoSendMetaData, I_OnEvent, I_OnSetAway, I_OnPostCommand }; - ServerInstance->Modules->Attach(eventlist, this, 28); + ServerInstance->Modules->Attach(eventlist, this, 27); delete ServerInstance->PI; ServerInstance->PI = new SpanningTreeProtocolInterface(this, Utils, ServerInstance); for (std::vector::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++) { - this->OnPostConnect((*i)); + ServerInstance->PI->Introduce(*i); } } @@ -622,31 +622,6 @@ void ModuleSpanningTree::OnUserPart(User* user, Channel* channel, const std::str } } -void ModuleSpanningTree::OnPostConnect(User* user) -{ - if (IS_LOCAL(user)) - { - std::deque params; - params.push_back(user->uuid); - params.push_back(ConvToStr(user->age)); - params.push_back(user->nick); - params.push_back(user->host); - params.push_back(user->dhost); - params.push_back(user->ident); - params.push_back("+"+std::string(user->FormatModes())); - params.push_back(user->GetIPString()); - params.push_back(ConvToStr(user->signon)); - params.push_back(":"+std::string(user->fullname)); - Utils->DoOneToMany(ServerInstance->Config->GetSID(), "UID", params); - } - - TreeServer* SourceServer = Utils->FindServer(user->server); - if (SourceServer) - { - SourceServer->SetUserCount(1); // increment by 1 - } -} - void ModuleSpanningTree::OnUserQuit(User* user, const std::string &reason, const std::string &oper_message) { if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h index a302c1f4f..fa3a33b02 100644 --- a/src/modules/m_spanningtree/main.h +++ b/src/modules/m_spanningtree/main.h @@ -161,7 +161,6 @@ class ModuleSpanningTree : public Module virtual void OnChangeHost(User* user, const std::string &newhost); virtual void OnChangeName(User* user, const std::string &gecos); virtual void OnUserPart(User* user, Channel* channel, const std::string &partmessage, bool &silent); - virtual void OnPostConnect(User* user); virtual void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message); virtual void OnUserPostNick(User* user, const std::string &oldnick); virtual void OnUserKick(User* source, User* user, Channel* chan, const std::string &reason, bool &silent); diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp index e586c7017..850a27c22 100644 --- a/src/modules/m_spanningtree/protocolinterface.cpp +++ b/src/modules/m_spanningtree/protocolinterface.cpp @@ -172,3 +172,27 @@ void SpanningTreeProtocolInterface::SendUserNotice(User* target, const std::stri } } +void SpanningTreeProtocolInterface::Introduce(User* user) +{ + if (IS_LOCAL(user)) + { + std::deque params; + params.push_back(user->uuid); + params.push_back(ConvToStr(user->age)); + params.push_back(user->nick); + params.push_back(user->host); + params.push_back(user->dhost); + params.push_back(user->ident); + params.push_back("+"+std::string(user->FormatModes())); + params.push_back(user->GetIPString()); + params.push_back(ConvToStr(user->signon)); + params.push_back(":"+std::string(user->fullname)); + Utils->DoOneToMany(ServerInstance->Config->GetSID(), "UID", params); + } + + TreeServer* SourceServer = Utils->FindServer(user->server); + if (SourceServer) + { + SourceServer->SetUserCount(1); // increment by 1 + } +} diff --git a/src/modules/m_spanningtree/protocolinterface.h b/src/modules/m_spanningtree/protocolinterface.h index b43e88c67..1b8c6ec56 100644 --- a/src/modules/m_spanningtree/protocolinterface.h +++ b/src/modules/m_spanningtree/protocolinterface.h @@ -25,6 +25,7 @@ class SpanningTreeProtocolInterface : public ProtocolInterface virtual void SendUserPrivmsg(User* target, const std::string &text); virtual void SendUserNotice(User* target, const std::string &text); virtual void GetServerList(ProtoServerList &sl); + virtual void Introduce(User* u); }; #endif diff --git a/src/users.cpp b/src/users.cpp index c892c51f5..143313af2 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -959,6 +959,8 @@ void User::FullConnect() this->registered = REG_ALL; + ServerInstance->PI->Introduce(this); + FOREACH_MOD(I_OnPostConnect,OnPostConnect(this)); ServerInstance->SNO->WriteToSnoMask('c',"Client connecting on port %d: %s!%s@%s [%s] [%s]", this->GetPort(), this->nick.c_str(), this->ident.c_str(), this->host.c_str(), this->GetIPString(), this->fullname.c_str());