Lot more to do yet: -- finish Roster API (adding/removing items) -- do roster pushes to all connected clients (easily locally, more fun with a cluster) -- presence (big one, but roster pushes will get it a lot of the way there) -- easy way for plugin authors to note certain functions as blocking and run them in child thread that won't stall the event loop (Jonathan Steinert's working on some Gearman modifications to make this transparent and easy, whether it's in a local process or anywhere else on the network...) -- finish LJ integration
From Perl I'd use POE, but it's so slow, and didn't support epoll. I added epoll support to POE years ago, it got ignored, I got cranky, it was still slow, and wrote my own that was fast and supported epoll.
Nowadays I feel like separating out Danga::Socket-the-eventloop and Danga::Socket-the-socket-base-class and letting them be independent entities that can both play with POE. That is, let my event loop run POE Components, or let my components run in the POE kernel proper. We hired a POE guy recently who is going to look at doing that.
I do. It also didn't exist when I wrote Perlbal. And libevent back then had the advertising clause in their BSD license, making it a little weird to release with Perl code which likes to be GPL or Artistic. I believe it's since been removed.