From 57c1bd3b3707ec0b061b489d61cd93c8d3b7f7ec Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Mon, 20 Oct 2014 16:30:56 -0400 Subject: [PATCH] Some code cleaning --- Jupiter/Plugin.cpp | 36 ++++++++++++++++++---------- Jupiter/Plugin.h | 57 +++++++++++++++++++++++++++++++------------- Release/Jupiter.lib | Bin 246788 -> 247414 bytes 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/Jupiter/Plugin.cpp b/Jupiter/Plugin.cpp index 3afe8af..747bb3e 100644 --- a/Jupiter/Plugin.cpp +++ b/Jupiter/Plugin.cpp @@ -31,7 +31,6 @@ Jupiter::ArrayList _plugins; Jupiter::ArrayList *Jupiter::plugins = &_plugins; struct dlib; Jupiter::ArrayList _libList; -Jupiter::ArrayList *libList = &_libList; Jupiter::Plugin::~Plugin() { @@ -113,7 +112,7 @@ Jupiter::Plugin *Jupiter::loadPluginFile(const char *file) dPlug->plugin = func(); if (dPlug->plugin == nullptr) goto fail; - libList->add(dPlug); + _libList.add(dPlug); _plugins.add(dPlug->plugin); return dPlug->plugin; @@ -129,7 +128,7 @@ bool Jupiter::freePlugin(size_t index) { // Do not free() the plugin; plugin gets free'd by FreeLibrary(). _plugins.remove(index); - dlib *dPlug = libList->remove(index); + dlib *dPlug = _libList.remove(index); typedef void (*func_type)(void); #if defined _WIN32 @@ -178,6 +177,27 @@ Jupiter::Plugin *Jupiter::getPlugin(const Jupiter::ReadableString &pluginName) // Event Placeholders +int Jupiter::Plugin::think() +{ + return 0; +} + +int Jupiter::Plugin::OnRehash() +{ + return 0; +} + +bool Jupiter::Plugin::OnBadRehash(bool removed) +{ + Jupiter::Plugin::_shouldRemove = removed; + return false; +} + +bool Jupiter::Plugin::shouldRemove() +{ + return Jupiter::Plugin::_shouldRemove; +} + void Jupiter::Plugin::OnConnect(Jupiter::IRC::Client *) { return; @@ -193,11 +213,6 @@ void Jupiter::Plugin::OnReconnectAttempt(Jupiter::IRC::Client *, bool) return; } -int Jupiter::Plugin::OnRehash() -{ - return 0; -} - void Jupiter::Plugin::OnRaw(Jupiter::IRC::Client *, const Jupiter::ReadableString &) { return; @@ -276,9 +291,4 @@ void Jupiter::Plugin::OnMode(Jupiter::IRC::Client *, const Jupiter::ReadableStri void Jupiter::Plugin::OnThink(Jupiter::IRC::Client *) { return; -} - -int Jupiter::Plugin::think() -{ - return 0; } \ No newline at end of file diff --git a/Jupiter/Plugin.h b/Jupiter/Plugin.h index 475cf8f..b4e3083 100644 --- a/Jupiter/Plugin.h +++ b/Jupiter/Plugin.h @@ -38,7 +38,43 @@ namespace Jupiter */ class JUPITER_API Plugin : public Jupiter::Thinker, public Jupiter::Rehashable { - public: + public: // Jupiter::Thinker + /** + * @brief Makes the Plugin "think". This does nothing, unless overloaded. + * This method should return an error other than 0 if you want the plugin to be released. + * + * @return 0 when no error occurs, an error otherwise. + */ + virtual int think() override; + + public: // Jupiter::Rehashable + /** + * @brief This is called when rehash() is called. + * @see Jupiter::Rehashable::OnRehash(). + * + * @return 0 if no error occurs, a postive integer if an error occurs, or a negative integer if an error occurs and the object should be deleted. + */ + virtual int OnRehash() override; + + /** + * @brief This is called when OnRehash() returns an error during rehash(). + * @see Jupiter::Rehashable::OnRehash(). + * Note: If you override this, be sure to call Jupiter::Plugin::OnBadRehash(removed) before returning. + * + * @param removed True if the object was removed from the rehash list, false otherwise. + * @return True if the object should be deleted, false otherwise. + */ + virtual bool OnBadRehash(bool removed) override; + + public: // Jupiter::Plugin + /** + * @brief Checks if this plugin should be unloaded. + * This returns "true" after a call to OnBadRehash(). + * + * @returns True if this plugin should be unloaded, false otherwise. + */ + bool shouldRemove(); + /** * @brief This is called when a connection has been successfully established. * The current implementation calls this after the MOTD. @@ -59,14 +95,6 @@ namespace Jupiter */ virtual void OnReconnectAttempt(Jupiter::IRC::Client *server, bool successConnect); - /** - * @brief This is called when rehash() is called. - * @see Jupiter::Rehashable::OnRehash(). - * - * @return 0 if no error occurs, a postive integer if an error occurs, or a negative integer if an error occurs and the object should be deleted. - */ - virtual int OnRehash(); - /** * @brief This is called after a message has been normally processed. * This always happens last. All other hooks will be called before this. @@ -204,14 +232,6 @@ namespace Jupiter */ virtual void OnThink(Jupiter::IRC::Client *server); - /** - * @brief Makes the Plugin "think". This does nothing, unless overloaded. - * This method should return an error other than 0 if you want the plugin to be released. - * - * @return 0 when no error occurs, an error otherwise. - */ - virtual int think(); - /** * @brief Returns the name of the plugin. * @@ -223,6 +243,9 @@ namespace Jupiter * @brief Destructor for Plugin class. */ virtual ~Plugin(); + + protected: + bool _shouldRemove = false; }; /** Plugin management functions */ diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index 7b72af9de1fcf84b41417bd9b8ffb7429dea1bed..71cc322bce3711ac0417adfe22451227c73d165c 100644 GIT binary patch delta 32322 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 HEc(9y`g-nR delta 31760 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