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.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.5 KiB
						
					
					
				| var sys = require('sys'),
 | |
| 	xmpp = require('node-xmpp'),
 | |
| 	colors = require('colors'),
 | |
| 	events = require('events');
 | |
| 
 | |
| var Room = function(client, name, callback) {
 | |
| 	events.EventEmitter.call(this);
 | |
| 	this._isReady = false;
 | |
| 	this.client = client;
 | |
| 	this.room = name;
 | |
| 	this.to = this.room + '/' + this.client.jid.user;
 | |
| 	var room = this;
 | |
| 	this.addListener('presence', function(from, stanza) {
 | |
| 		var jfrom = new xmpp.JID(from);
 | |
| 		if(name == jfrom.user + '@' + jfrom.domain) {
 | |
| 			var x = stanza.getChild('x', 'http://jabber.org/protocol/muc#user');
 | |
| 			if(x != null) {
 | |
| 				var item = x.getChild('item');
 | |
| 				if(item != null) {
 | |
| 					room.affiliation = item.attrs.affiliation;
 | |
| 					room.role = item.attrs.role;
 | |
| 				}
 | |
| 				var status = x.getChild('status');
 | |
| 				if(! room._isReady) {
 | |
| 					room._isReady = true;
 | |
| 					callback.call(room, (status != null) ? status.attrs.code : '200');
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	});
 | |
| 	this.presence();
 | |
| };
 | |
| 
 | |
| sys.inherits(Room, events.EventEmitter);
 | |
| 
 | |
| exports.Room = Room;
 | |
| 
 | |
| Room.prototype.presence = function() {
 | |
| 	sys.debug(('presence: ' + this.room)[this.client.color]);
 | |
| 	this.client.xmpp.send(new xmpp.Element('presence', {
 | |
| 			to: this.to
 | |
| 		})
 | |
| 		.c('priority').t("5").up()
 | |
| 		.c('x', {xmlns:"http://jabber.org/protocol/muc"})
 | |
| 		.tree()
 | |
| 	);
 | |
| };
 | |
| 
 | |
| Room.prototype.message = function(message) {
 | |
| 	this.client.xmpp.send(new xmpp.Element('message', {
 | |
| 			to: this.room,
 | |
| 			type: 'groupchat',
 | |
| 			id: this.client._iq++
 | |
| 		})
 | |
| //		.c('nick', {xmlns: 'http://jabber.org/protocol/nick'}).t(this.client.jid.username).up()
 | |
| 		.c('body').t(message).up()
 | |
| 		.tree()
 | |
| 		);
 | |
| };
 |