diff options
author | attilamolnar <attilamolnar@hush.com> | 2013-07-20 20:30:18 +0200 |
---|---|---|
committer | attilamolnar <attilamolnar@hush.com> | 2013-07-24 18:10:20 +0200 |
commit | c265641c0a9a9b0a4686e1ea313876c16b4700ad (patch) | |
tree | 42c89bf0a397bd26d2c9e2870ff6dbebf562ea7e /include/snomasks.h | |
parent | 909cba9b756179bfa16d985916db1084cb7b4a9d (diff) |
Rewrite SnomaskManager::SendMessage() and Flush(), split code into functions
Diffstat (limited to 'include/snomasks.h')
-rw-r--r-- | include/snomasks.h | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/include/snomasks.h b/include/snomasks.h index c5d594eeb..db3989225 100644 --- a/include/snomasks.h +++ b/include/snomasks.h @@ -22,28 +22,50 @@ #pragma once +class SnomaskManager; class Snomask { - public: + /** Description of this snomask, e.g.: OPER, ANNOUNCEMENT, XLINE + */ std::string Description; + + /** Information about the last sent message, + * used for sending "last message repeated X times" messages + */ std::string LastMessage; - int Count; - bool LastBlocked; char LastLetter; + unsigned int Count; + /** Log and send a message to all opers who have the given snomask set + * @param letter The target users of this message + * @param desc The description of this snomask, will be prepended to the message + * @param msg The message to send + */ + static void Send(char letter, const std::string& desc, const std::string& msg); + + public: /** Create a new Snomask */ - Snomask() : Count(0), LastBlocked(false), LastLetter(0) - { - } + Snomask(); /** Sends a message to all opers with this snomask. + * @param message The message to send + * @param remote If true the message will go to the uppercase variant of this snomask */ - void SendMessage(const std::string &message, char letter); + void SendMessage(const std::string& message, char letter); /** Sends out the (last message repeated N times) message */ void Flush(); + + /** Returns the description of this snomask + * @param remote If true the description of the uppercase (remote) variant of this snomask + * will be returned (i.e.: "REMOTE" will be prepended to the description). + * @return The description of this snomask + */ + std::string GetDescription(char letter) const; + + friend class SnomaskManager; }; /** Snomask manager handles routing of SNOMASK (usermode +s) messages to opers. @@ -52,9 +74,9 @@ class Snomask */ class CoreExport SnomaskManager { - public: Snomask masks[26]; + public: /** Create a new SnomaskManager */ SnomaskManager(); @@ -94,7 +116,6 @@ class CoreExport SnomaskManager */ void WriteGlobalSno(char letter, const char* text, ...) CUSTOM_PRINTF(3, 4); - /** Called once per 5 seconds from the mainloop, this flushes any cached * snotices. The way the caching works is as follows: * Calls to WriteToSnoMask write to a cache, if the call is the same as it was @@ -104,4 +125,12 @@ class CoreExport SnomaskManager * is not particularly significant, in order to keep notices going out. */ void FlushSnotices(); + + /** Check whether a given character is an enabled (initialized) snomask. + * Valid snomask chars are lower- or uppercase letters and have a description. + * Snomasks are initialized with EnableSnomask(). + * @param ch The character to check + * @return True if the given char is allowed to be set via +s. + */ + bool IsSnomaskUsable(char ch) const; }; |