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.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							2.0 KiB
						
					
					
				var sys = require("sys"),
 | 
						|
	xmpp = require("node-xmpp"),
 | 
						|
	colors = require("colors"),
 | 
						|
	events = require("events");
 | 
						|
 | 
						|
var NS_MUC	= "http://jabber.org/protocol/muc";
 | 
						|
 | 
						|
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.params.nickname;
 | 
						|
	
 | 
						|
	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", NS_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("dnd", "Loading...");
 | 
						|
	this.client.emit("muc:binded");
 | 
						|
};
 | 
						|
 | 
						|
sys.inherits(Room, events.EventEmitter);
 | 
						|
 | 
						|
exports.Room = Room;
 | 
						|
 | 
						|
Room.prototype.presence = function(status, message)
 | 
						|
{
 | 
						|
	if (typeof status === "undefined")
 | 
						|
	{
 | 
						|
		var status	= "";
 | 
						|
	}
 | 
						|
	
 | 
						|
	if (typeof message === "undefined")
 | 
						|
	{
 | 
						|
		var message	= "";
 | 
						|
	}
 | 
						|
	
 | 
						|
	this.client.xmpp.send(new xmpp.Element("presence", {
 | 
						|
			to: this.to
 | 
						|
		})
 | 
						|
		.c("priority").t("5").up()
 | 
						|
		.c("show").t(status).up()
 | 
						|
		.c("status").t(message).up()
 | 
						|
		.c("x", {xmlns: NS_MUC})
 | 
						|
		.tree()
 | 
						|
	);
 | 
						|
};
 | 
						|
 | 
						|
Room.prototype.changenick = function(newnick)
 | 
						|
{
 | 
						|
	this.client.params.nickname	= newnick;
 | 
						|
	this.client.unidle();
 | 
						|
	
 | 
						|
	this.client.xmpp.send(new xmpp.Element("presence", {
 | 
						|
			to: this.to.split("/")[0]+"/"+this.client.params.nickname
 | 
						|
		})
 | 
						|
		.c("x", {xmlns: NS_MUC})
 | 
						|
		.tree()
 | 
						|
	);
 | 
						|
};
 | 
						|
 | 
						|
Room.prototype.message = function(message) {
 | 
						|
	this.client.unidle();
 | 
						|
	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()
 | 
						|
		);
 | 
						|
};
 |