A few weeks ago I downloaded “libircclient” and toyed with it for a few hours, set up an IRC server (last time I touched IRC was back at Demon probably in 95-97) and dircproxy. On Sunday, I decided to go ahead and build an API around libircclient; spent maybe 3 hours doing that.
I figured it might be worth a little tinkering to plug it into one of the game servers to toy with the idea of using an external chat interface for game monitoring/management. IRC is still one of the few IM protocols that you can run your own, private servers for…
Monday I decided to spend my lunch plugging that API into the server project, specifically the strat host, such that with only minimal intrusive lines of code, the strat server was configured to log into the IRC server and join a particular channel. If the server crashes, it will appear to leave the channel, with a couple of channel messages at various critical state changes.
So I plugged it into the chat host too – 8 minutes, and decided to value-add that by having it join a few extra channels and mapping those to in-game channels (crs, gm, hc) so that CMs and staff can more easily monitor the game from without.
The reality is this is primarily a monitoring tool. If the API wasn’t so slim and easy to work with, stable, compact, efficient and robust, I would probably just have extended ircd or one of the “mini ircd”s to support netcode2 and let the chat server talk to it natively; but I reckon I’d have had to write a lot more code and I’d have had to more intimately refamiliarize myself with the innards of ircd and/or the irc protocols.
I was thinking that getting anyone in the office – other than bloo – to use the irc server would be a dead horse flogging. But Doc, Hallpass and even Toto were in there :) Latham pointed me at Trillian which isn’t a great IRC client but it is pretty convenient and – since the IRC network is entirely inside our internal network, we’re not going to be doing any hardcore IRC stuff: for our purposes, /me is advanced.
I’m impressed by how easily it came together, how stable its been despite how I’ve tried to break it. I owe most of that to libircclient tho.
Trying to explain it to Doc was fun – I forgot to translate to human first and I think I gave him images of the chat server physically typing on a keyboard to operate an MSN messenger type client and log in to some “remote” messaging service. In actuality, its fairly simple: they’re two chat servers, the IRC is the boss of the IRC conversations and chat is just a client in that context. You might even call it a bot. It’s just a bot with some whammy.
Inevitably, some of you are going to (again) suggest IRC as a chat system for the game itself. Right, and if x-rays are safe enough for healthcare then they must be safe.
IRC is Internet Relay Chat. Its all about the distribution of messages, and not the efficiency of messaging (or it wouldn’t be a text-based protocol, for starters). If we had lots of zone processes and players were well distributed across distinct processes – then IRC might make sense.
In the case of the monitoring system I’ve implemented, efficiency is not a concern – a handful of CMs/staff interacting with the server with 1-3s lag is quite acceptable; one CPU provides the services for all of the game processes and cost of off-loading to that CPU has a minimal footprint – we’re sending less than 0.1% of all game chat to it.