*/
typedef std::vector<User*> OperList;
+ /** A list holding local users
+ */
+ typedef insp::intrusive_list<LocalUser> LocalList;
+
private:
/** Map of IP addresses for clone counting
*/
*/
const CloneCounts zeroclonecounts;
+ /** Local client list, a list containing only local clients
+ */
+ LocalList local_users;
+
+ /** Last used already sent id, used when sending messages to neighbors to help determine whether the message has
+ * been sent to a particular user or not. See User::ForEachNeighbor() for more info.
+ */
+ already_sent_t already_sent_id;
+
public:
/** Constructor, initializes variables
*/
*/
user_hash uuidlist;
- /** Local client list, a list containing only local clients
- */
- LocalUserList local_users;
-
/** Oper list, a vector containing all local and remote opered users
*/
OperList all_opers;
*/
unsigned int unregistered_count;
- /**
- * Reset the already_sent IDs so we don't wrap it around and drop a message
- * Also removes all expired invites
- */
- void GarbageCollect();
-
/** Perform background user events such as PING checks
*/
void DoBackgroundUserStuff();
*/
void RemoveCloneCounts(User *user);
+ /** Rebuild clone counts
+ */
+ void RehashCloneCounts();
+
/** Return the number of local and global clones of this user
* @param user The user to get the clone counts for
* @return The clone counts of this user. The returned reference is volatile - you
*/
user_hash& GetUsers() { return clientlist; }
+ /** Get a list containing all local users
+ * @return A const list of local users
+ */
+ const LocalList& GetLocalUsers() const { return local_users; }
+
/** Send a server notice to all local users
* @param text The text format string to send
* @param ... The format arguments
*/
void ServerNoticeAll(const char* text, ...) CUSTOM_PRINTF(2, 3);
+
+ /** Retrieves the next already sent id, guaranteed to be not equal to any user's already_sent field
+ * @return Next already_sent id
+ */
+ already_sent_t NextAlreadySentId();
};