*/
unsigned int behind_bursting;
+ /** True if this server has been lost in a split and is awaiting destruction
+ */
+ bool isdead;
+
/** This method is used to add this TreeServer to the
* hash maps. It is only called by the constructors.
*/
void AddHashEntry();
+ /** Used by SQuit logic to recursively remove servers
+ */
+ void SQuitInternal(unsigned int& num_lost_servers);
+
+ /** Remove the reference to this server from the hash maps
+ */
+ void RemoveHash();
+
public:
typedef std::vector<TreeServer*> ChildServers;
FakeUser* const ServerUser; /* User representing this server */
*/
TreeServer(const std::string& Name, const std::string& Desc, const std::string& id, TreeServer* Above, TreeSocket* Sock, bool Hide);
- int QuitUsers(const std::string &reason);
+ /** SQuit a server connected to this server, removing the given server and all servers behind it
+ * @param server Server to squit, must be directly below this server
+ * @param reason Reason for quitting the server, sent to opers and other servers
+ */
+ void SQuitChild(TreeServer* server, const std::string& reason);
+
+ /** SQuit this server, removing this server and all servers behind it
+ * @param reason Reason for quitting the server, sent to opers and other servers
+ */
+ void SQuit(const std::string& reason)
+ {
+ GetParent()->SQuitChild(this, reason);
+ }
+
+ static unsigned int QuitUsers(const std::string& reason);
/** Get route.
* The 'route' is defined as the locally-
*/
bool IsLocal() const { return (this->Route == this); }
+ /** Returns true if the server is awaiting destruction
+ * @return True if the server is waiting to be culled and deleted, false otherwise
+ */
+ bool IsDead() const { return isdead; }
+
/** Get server version string
*/
const std::string& GetVersion();
*/
bool DelChild(TreeServer* Child);
- /** Removes child nodes of this node, and of that node, etc etc.
- * This is used during netsplits to automatically tidy up the
- * server tree. It is slow, we don't use it for much else.
- */
- void Tidy();
-
/** Get server ID
*/
const std::string& GetID();
CullResult cull();
- /** Destructor
- * Removes the reference to this object from the
- * hash maps.
+ /** Destructor, deletes ServerUser unless IsRoot()
*/
~TreeServer();