(Quoted out of order for ease of responding)
Nick Gammon said: But for the client to do it, every plugin would need to know exactly what every other plugin needs, which surely is far too much interdependency?
Ehm... no. The central GMCP plugin keeps track of what the others want, and the others only deal with themselves.
Nick Gammon said: I don't see how either end can safely remove modules. The server won't know if the client has had a plugin crash, which stopped it removing a module. Or indeed the client might erroneously remove the module once too often.
The central plugin should reasonably be able to tell, using refcounting, whether or not it should add or remove a module. With MUSHclient, you can use OnPluginListChanged to tell if a plugin disappeared. The only issue arises when you introduce multiple "central plugins", which is really more of a non-issue.
Nick Gammon said: I would suggest that, if both the client and server are designed to cope with a certain number of message types (eg. room changes, battle information, inventory) then once requested, they should be sent until the connection is broken. After all, the player installing a module, and then removing it, but remaining connected for weeks, is surely an unlikely scenario? And if the system can't cope with that many messages, then you have a problem in the first place.
The player doesn't touch GMCP. The plugins that use GMCP do, and they can enable/disable modules as they please. As a very off-the-cuff example: You might have a plugin tracking your stats and your inventory, and you could disable the inventory tracking feature, so it can disable the associated module.
I also don't think it's so much about the system as it is the network bandwidth being used. If you don't need it, why send it? |