1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.3 KiB

14 years ago
XMPP Client for node
====================
Node-xmpp is a cute but low level tool, so, here is xmpp client.
14 years ago
IQ are handled with callback, presence and roster is manageable, every xmpp events become a node event. This client tries to be as polite as Psi.
14 years ago
Install
-------
14 years ago
You need the low level node xmpp tools.
14 years ago
npm install xmpp
14 years ago
Test
----
Async testing is a sport, you need colors for that :
14 years ago
npm install colors
npm install nodeunit
You have to edit a new file in `test/conf.js` :
exports.conf = {
a: {
jid: 'andre@gmail.com',
14 years ago
password: '42',
color: 'red',
host: 'talk.google.com'
14 years ago
},
b: {
jid: 'bob@jabber.org',
password: 'beuha'
}
}
Then, you can launch test :
node test/test.js
14 years ago
API
---
Client handle all the xmpp stack with object, callback, event and handlers. All in async.
### Client ###
The first object is the client :
var c = new Client({
jid: 'bob@jabber.org',
password: 'beuha'
}, function() {
sys.debug("I'm connected");
});
You instiante it with xmpp params and callback, tirggered when connection is done, and roster fetched. All your work should be inside the callback, outside, you don't know your state.
The client throw events :
* _presence_
* _presence:error_
* _message_
### IQ ###
Iq is handled quietly. You can ask someone with a callback, for the response.
var jabber = this;
this.iq(new xmpp.Element('query', {xmlns: 'jabber:iq:roster'}), function(iq) {
iq.getChild('query', 'jabber:iq:roster').children.forEach(function(child) {
//iterating over evrybody
sys.debug(child.attrs.jid);
});
});
Answering a distant iq is handled with an handler. Default object handles :
* _http://jabber.org/protocol/disco#info_
* _jabber:iq:last_
* _jabber:iq:version_
Here is an example :
var jabber = this;
this.registerIqHandler('jabber:iq:last', function(stanza) {
jabber.resultIq(stanza, new xmpp.Element('query', {
xmlns: 'jabber:iq:last', seconds:'1'})
.tree()
);
});
Not handled iq throws an event : _iq:unknow_
### Room ###
Just like Client, room is created with a callback, triggered when presence is return from the server.
this.room('beuha', function(status) {})