Quoting Tony Garnock-Jones tonyg@lshift.net:
Julian Fitzell wrote:
And I should really dig out my server code and the changes I made to your library and put them out there.
Please do! I've been working on a Smalltalk Jabber server myself, and since it was the first Smalltalk program of any size I ever wrote, I'd love to see where I went wrong and learn better idiom.
He he... well, I've done it. It was actually easier to get work than I expected since many of the dependencies I had last year have now been included in Squeak.
By the way, looking at this code reminded me how much I wanted traits when I was first writing it. Jabber has all these protocol elements, many of which share various attribute sets but not in a single inheritance fashion. I was playing all kinds of games to build up a class hierarchy representing these elements and it wasn't much fun. If I do decide to keep working on this, I think I'll try to see how it improves with the addition of Traits.
So here's what you do:
- grab a 3.8 image - head over to www.squeaksource.com and find the Jabber project - install the KomServices package there (Göran, I have a version that removes the use of Dynamic Bindings and adds a pluggable service... I can merge the changes into your new package if you're interested) - install the Jabber package - get a server running:
JBSRouter default addServiceOfClass: JBSClientService identifier: 'localhost'. JBSRouter default services do: [:ea | ea start].
Then point your jabber client at localhost:5222, tell it to create a new user for you, and you might find it works. Or you might not... :) Open a transcript: you'll see message being encoded and decoded. I tested it tonight with Psi and was able to create two accounts, log in with both, add them to each others' rosters, and send messages back and forth. Mileage may vary with other clients. I can't remember if digest auth was working; you may need to tell your client to do plaintext authentication. Not sure.
To try the client, I think you want to do:
JBCBuddyList open
but to be honest I never really looked in much detail at Michael's UI code.
Some general notes: - I'm feeling pretty brave throwing this code out there without having even tried to figure out what state it was in over a year ago when I last touched it. Also, it being a mash of Michael's and my code, and since I just renamed and recategorized everything, there's bound to be breakage and obsolescence. - When I was working on this before, I was trying to pull stuff out of the client to share with the server, but I hadn't yet got around to having the client use some of the new, extracted code. The idea was to create JBPClientConnection that could be used both by the client, and by the client- to-server module of the server to deal with the client protocol. - Michael was writing the client code to be pluggable for different IM protocols. For now, I've removed some of these (very abstract) classes as they didn't belong in this package and can be easily refactored out again should we ever have more than one IM protocol. - Probably a whole bunch of other stuff but I'm tired and want to go to bed.
(If anyone's interested in my code, I could publish it, but it's only about half-finished, besides being generally pretty awful. It doesn't even do messaging yet.)
Please do... or take a look at what I had and see if you can contribute to or steal from it. I'd say my code would be lucky to be called half-finished but I was driving very hard to actually have it work with the basic client interaction. That's the only reason I announced it last year: it seemed to do something.
Julian