dojo.provide("dojox.xmpp.ChatService"); dojox.xmpp.chat = { CHAT_STATE_NS: 'http://jabber.org/protocol/chatstates', ACTIVE_STATE: 'active', COMPOSING_STATE: 'composing', INACTIVE_STATE: 'inactive', PAUSED_STATE: 'paused', GONE_STATE: 'gone' } dojo.declare("dojox.xmpp.ChatService", null, { state: "", constructor: function(){ this.state=""; this.chatid = Math.round(Math.random() * 1000000000000000); }, recieveMessage: function(msg,initial){ if (msg&&!initial){ this.onNewMessage(msg); } }, setSession: function(session){ this.session = session; }, setState: function(state){ if (this.state != state){ this.state = state; } }, invite: function(contact){ if (this.uid){return;} if(!contact || contact==''){ throw new Error("ChatService::invite() contact is NULL"); } this.uid = contact; var req = { xmlns: "jabber:client", to: this.uid, from: this.session.jid + "/" + this.session.resource, type: "chat" } var request = new dojox.string.Builder(dojox.xmpp.util.createElement("message", req, false)); request.append(dojox.xmpp.util.createElement("thread",{},false)); request.append(this.chatid); request.append(""); request.append(dojox.xmpp.util.createElement("active",{xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); request.append(""); this.session.dispatchPacket(request.toString()); this.onInvite(contact); this.setState(dojox.xmpp.chat.CHAT_STATE_NS); }, sendMessage: function(msg){ if (!this.uid){ //console.log("ChatService::sendMessage() - Contact Id is null, need to invite to chat"); return; } if ((!msg.body || msg.body=="") && !msg.xhtml){return;} var req = { xmlns: "jabber:client", to: this.uid, from: this.session.jid + "/" + this.session.resource, type: "chat" } var message = new dojox.string.Builder(dojox.xmpp.util.createElement("message",req,false)); var html = dojox.xmpp.util.createElement("html", { "xmlns":dojox.xmpp.xmpp.XHTML_IM_NS},false) var bodyTag = dojox.xmpp.util.createElement("body", {"xml:lang":this.session.lang, "xmlns":dojox.xmpp.xmpp.XHTML_BODY_NS}, false) + msg.body + ""; var bodyPlainTag = dojox.xmpp.util.createElement("body", {}, false) + dojox.xmpp.util.stripHtml(msg.body) + ""; /* if (msg.xhtml){ if (msg.xhtml.getAttribute('xmlns') != dojox.xmpp.xmpp.XHTML_IM_NS){ //console.log("ChatService::sendMessage() - Cannot use this xhtml without the propper xmlns"); }else{ //FIXME do this in some portable way //console.log("ChatService::sendMessage() - FIXME Serialize XHTML to string: ", msg.xhtml.toString()); } } */ if (message.subject && message.subject != ""){ message.append(dojox.xmpp.util.createElement("subject",{},false)); message.append(message.subject); message.append(""); } message.append(bodyPlainTag); message.append(html); message.append(bodyTag); message.append(""); message.append(dojox.xmpp.util.createElement("thread", {}, false)); message.append(this.chatid); message.append(""); if (this.useChatStates){ message.append(dojox.xmpp.util.createElement("active",{xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); } message.append(""); this.session.dispatchPacket(message.toString()); }, sendChatState: function(state){ if (!this.useChatState || this.firstMessage){return;} if (state==this._currentState){return;} var req={ xmlns: "jabber:client", to: this.uid, from: this.session.jid + "/" + this.session.resource, type: "chat" } var request = new dojox.string.Builder(dojox.xmpp.util.createElement("message",req,false)); request.append(dojox.xmpp.util.createElement(state, {xmlns: dojox.xmpp.chat.CHAT_STATE_NS},true)); this._currentState = state; request.append(""); request.append(this.chatid); request.append(""); this.session.dispatchPacket(request.toString()); }, //EVENTS onNewMessage: function(msg){}, onInvite: function(contact){} });