I have written a support library for creating daemons that send and receive commands via IM networks. Well, sorta -- at the moment, I only have a Jabber backend, but the library is split up into fairly general IM daemon management and protocol-specific support.
The working name is Net::IMClient for the general module, and Net::IMClient::Jabber for the jabber support. I suppose I could use 'XMPP' rather than 'Jabber' in the name, but apart from that, is this a good space? 'IMClient' seems a bit clunky, and oddly is normally (but not always) used to implement daemons. The "client" in the name is because they are always clients in the instant messaging protocol sense, which is independent from the sense of the functionality they implement. I think I'm confusing things here, so allow me a few examples to demonstrate. I have written a simple command-line jabber message sending script using these libraries. My libs provide a thin wrapper over Net::Jabber for this purpose, but I want to mention it because it's the simplest use of the libs. I have also hacked my tinderbox installation to use Jabber as the build box -> tinderbox server protocol in place of email. So I have a "tinderserve" subclass of Net::IMClient which waits for build status messages from the build boxes. It also accepts commands from regular users via IM -- things like "let me know if a build breaks", "what commands do you support", etc. It is this sort of usage that is the whole point of the library. The build boxes themselves use the library to send out their build status messages. I am also experimenting with making them listen for IM commands that would allow users to change their configuration, force a 'make clean', etc. I have a few other uses (most notably as the core piece of a distributed test framework's architecture), but I think the tinderbox example best illustrates what this is all about. I'm not sure if Net:: is even the right top-level namespace, since I do very little actual protocol manipulation; nearly everything goes through the Net::Jabber API. TIA, Steve
