From 81ce57622c3166830b23eae534dacc6b008c659d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 28 Mar 2018 16:34:30 +0300 Subject: common protocol instance management code went into template --- protocols/IRCG/src/irclib.cpp | 2 +- protocols/IRCG/src/main.cpp | 34 +------------------------------- protocols/IRCG/src/services.cpp | 43 ++++++++++++++--------------------------- protocols/IRCG/src/stdafx.h | 9 +++++++-- 4 files changed, 24 insertions(+), 64 deletions(-) (limited to 'protocols/IRCG/src') diff --git a/protocols/IRCG/src/irclib.cpp b/protocols/IRCG/src/irclib.cpp index 28db677271..1dea025bbe 100644 --- a/protocols/IRCG/src/irclib.cpp +++ b/protocols/IRCG/src/irclib.cpp @@ -1412,7 +1412,7 @@ LBL_Parse: if (iParamCnt != 2) cbLen = mir_snprintf(buf, "%s : ERROR : UNKNOWN-ERROR\r\n", szBuf); else { - for (auto &it : g_Instances) + for (auto &it : CMPlugin::g_arInstances) if (PeerPortNrRcvd == it->m_info.iPort && LocalPortNrRcvd == it->m_myLocalPort) { cbLen = mir_snprintf(buf, "%s : USERID : %S : %S\r\n", szBuf, it->m_info.sIdentServerType.c_str(), it->m_info.sUserID.c_str()); diff --git a/protocols/IRCG/src/main.cpp b/protocols/IRCG/src/main.cpp index 81ff6f6581..1dd78c6e77 100644 --- a/protocols/IRCG/src/main.cpp +++ b/protocols/IRCG/src/main.cpp @@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "version.h" +CMPlugin g_plugin; CHAT_MANAGER *pci; CLIST_INTERFACE *pcli; HINSTANCE hInst = nullptr; @@ -35,13 +36,6 @@ static int CompareServers( const SERVER_INFO* p1, const SERVER_INFO* p2 ) OBJLIST g_servers( 20, CompareServers ); -static int sttCompareProtocols(const CIrcProto *p1, const CIrcProto *p2) -{ - return mir_strcmp(p1->m_szModuleName, p2->m_szModuleName); -} - -LIST g_Instances(1, sttCompareProtocols); - void UninitTimers( void ); // Information about the plugin @@ -93,29 +87,3 @@ extern "C" int __declspec(dllexport) Unload(void) UninitTimers(); return 0; } - -///////////////////////////////////////////////////////////////////////////////////////// - -static PROTO_INTERFACE* ircProtoInit(const char* pszProtoName, const wchar_t* tszUserName) -{ - CIrcProto *ppro = new CIrcProto(pszProtoName, tszUserName); - g_Instances.insert(ppro); - return ppro; -} - -static int ircProtoUninit(PROTO_INTERFACE *ppro) -{ - g_Instances.remove((CIrcProto*)ppro); - delete (CIrcProto*)ppro; - return 0; -} - -struct CMPlugin : public CMPluginBase -{ - CMPlugin() : - CMPluginBase("IRC") - { - RegisterProtocol(PROTOTYPE_PROTOCOL, ircProtoInit, ircProtoUninit); - } -} - g_plugin; diff --git a/protocols/IRCG/src/services.cpp b/protocols/IRCG/src/services.cpp index 1bb2274f9c..b6775b8b05 100644 --- a/protocols/IRCG/src/services.cpp +++ b/protocols/IRCG/src/services.cpp @@ -64,52 +64,39 @@ void CIrcProto::InitMainMenus(void) static HGENMENU hUMenuChanSettings, hUMenuWhois, hUMenuDisconnect, hUMenuIgnore; -static CIrcProto* IrcGetInstanceByHContact(MCONTACT hContact) +static INT_PTR IrcMenuChanSettings(WPARAM hContact, LPARAM lParam) { - char* szProto = GetContactProto(hContact); - if (szProto == nullptr) - return nullptr; - - for (auto &it : g_Instances) - if (!mir_strcmp(szProto, it->m_szModuleName)) - return it; - - return nullptr; -} - -static INT_PTR IrcMenuChanSettings(WPARAM wParam, LPARAM lParam) -{ - CIrcProto *ppro = IrcGetInstanceByHContact(wParam); - return (ppro) ? ppro->OnMenuChanSettings(wParam, lParam) : 0; + CIrcProto *ppro = CMPlugin::getInstance(hContact); + return (ppro) ? ppro->OnMenuChanSettings(hContact, lParam) : 0; } -static INT_PTR IrcMenuWhois(WPARAM wParam, LPARAM lParam) +static INT_PTR IrcMenuWhois(WPARAM hContact, LPARAM lParam) { - CIrcProto *ppro = IrcGetInstanceByHContact(wParam); - return (ppro) ? ppro->OnMenuWhois(wParam, lParam) : 0; + CIrcProto *ppro = CMPlugin::getInstance(hContact); + return (ppro) ? ppro->OnMenuWhois(hContact, lParam) : 0; } -static INT_PTR IrcMenuDisconnect(WPARAM wParam, LPARAM lParam) +static INT_PTR IrcMenuDisconnect(WPARAM hContact, LPARAM lParam) { - CIrcProto *ppro = IrcGetInstanceByHContact(wParam); - return (ppro) ? ppro->OnMenuDisconnect(wParam, lParam) : 0; + CIrcProto *ppro = CMPlugin::getInstance(hContact); + return (ppro) ? ppro->OnMenuDisconnect(hContact, lParam) : 0; } -static INT_PTR IrcMenuIgnore(WPARAM wParam, LPARAM lParam) +static INT_PTR IrcMenuIgnore(WPARAM hContact, LPARAM lParam) { - CIrcProto *ppro = IrcGetInstanceByHContact(wParam); - return (ppro) ? ppro->OnMenuIgnore(wParam, lParam) : 0; + CIrcProto *ppro = CMPlugin::getInstance(hContact); + return (ppro) ? ppro->OnMenuIgnore(hContact, lParam) : 0; } -int IrcPrebuildContactMenu(WPARAM wParam, LPARAM lParam) +int IrcPrebuildContactMenu(WPARAM hContact, LPARAM lParam) { Menu_ShowItem(hUMenuChanSettings, false); Menu_ShowItem(hUMenuWhois, false); Menu_ShowItem(hUMenuDisconnect, false); Menu_ShowItem(hUMenuIgnore, false); - CIrcProto *ppro = IrcGetInstanceByHContact(wParam); - return (ppro) ? ppro->OnMenuPreBuild(wParam, lParam) : 0; + CIrcProto *ppro = CMPlugin::getInstance(hContact); + return (ppro) ? ppro->OnMenuPreBuild(hContact, lParam) : 0; } void InitContactMenus(void) diff --git a/protocols/IRCG/src/stdafx.h b/protocols/IRCG/src/stdafx.h index eef1cb6a10..6b0f5e659e 100644 --- a/protocols/IRCG/src/stdafx.h +++ b/protocols/IRCG/src/stdafx.h @@ -587,6 +587,13 @@ private: CMStringW sNick4Perform; }; +struct CMPlugin : public ACCPROTOPLUGIN +{ + CMPlugin() : + ACCPROTOPLUGIN("IRC") + {} +}; + // map actual member functions to their associated IRC command. // put any number of this macro in the class's constructor. #define IRC_MAP_ENTRY(name, member) \ @@ -598,8 +605,6 @@ private: //main.cpp extern HINSTANCE hInst; -extern LIST g_Instances; - extern OBJLIST g_servers; CIrcProto* GetTimerOwner(UINT_PTR eventId); -- cgit v1.2.3