import StropheAll from '../../strophe.js' ; (function () { 'use strict'; var _utils = require('./utils').utils; var Message = function (type, id) { if (!this instanceof Message) { return new Message(type); } this._msg = {}; if (typeof Message[type] === 'function') { Message[type].prototype.setGroup = this.setGroup; this._msg = new Message[type](id); } return this._msg; } Message.prototype.setGroup = function (group) { this.body.group = group; } /* * text message */ Message.txt = function (id) { this.id = id; this.type = 'txt'; this.body = {}; }; Message.txt.prototype.set = function (opt) { this.value = opt.msg; this.body = { id: this.id , to: opt.to , msg: this.value , type: this.type , roomType: opt.roomType , ext: opt.ext || {} , success: opt.success , fail: opt.fail }; !opt.roomType && delete this.body.roomType; }; /* * cmd message */ Message.cmd = function (id) { this.id = id; this.type = 'cmd'; this.body = {}; }; Message.cmd.prototype.set = function (opt) { this.value = ''; this.body = { to: opt.to , action: opt.action , msg: this.value , type: this.type , roomType: opt.roomType , ext: opt.ext || {} }; !opt.roomType && delete this.body.roomType; }; /* * loc message */ Message.location = function (id) { this.id = id; this.type = 'loc'; this.body = {}; }; Message.location.prototype.set = function (opt) { this.body = { to: opt.to , type: this.type , roomType: opt.roomType , addr: opt.addr , lat: opt.lat , lng: opt.lng , ext: opt.ext || {} }; }; /* * img message */ Message.img = function (id) { this.id = id; this.type = 'img'; this.body = {}; }; Message.img.prototype.set = function (opt) { // opt.file = opt.file || _utils.getFileUrl(opt.fileInputId); ////console.log(opt) this.value = opt.file; this.body = { id: this.id, file: this.value, apiUrl: opt.apiUrl, to: opt.to, type: this.type, ext: opt.ext || {}, roomType: opt.roomType, onFileUploadError: opt.onFileUploadError, onFileUploadComplete: opt.onFileUploadComplete, success: opt.success, fail: opt.fail, flashUpload: opt.flashUpload, width: opt.width, height: opt.height, body: opt.body }; !opt.roomType && delete this.body.roomType; }; /* * audio message */ Message.audio = function (id) { this.id = id; this.type = 'audio'; this.body = {}; }; Message.audio.prototype.set = function (opt) { opt.file = opt.file || _utils.getFileUrl(opt.fileInputId); this.value = opt.file; this.filename = opt.filename || this.value.filename; this.body = { id: this.id , file: this.value , filename: this.filename , apiUrl: opt.apiUrl , to: opt.to , type: this.type , ext: opt.ext || {} , length: opt.length || 0 , roomType: opt.roomType , file_length: opt.file_length , onFileUploadError: opt.onFileUploadError , onFileUploadComplete: opt.onFileUploadComplete , success: opt.success , fail: opt.fail , flashUpload: opt.flashUpload , body: opt.body }; !opt.roomType && delete this.body.roomType; }; /* * file message */ Message.file = function (id) { this.id = id; this.type = 'file'; this.body = {}; }; Message.file.prototype.set = function (opt) { opt.file = opt.file || _utils.getFileUrl(opt.fileInputId); this.value = opt.file; this.filename = opt.filename || this.value.filename; this.body = { id: this.id , file: this.value , filename: this.filename , apiUrl: opt.apiUrl , to: opt.to , type: this.type , ext: opt.ext || {} , roomType: opt.roomType , onFileUploadError: opt.onFileUploadError , onFileUploadComplete: opt.onFileUploadComplete , success: opt.success , fail: opt.fail , flashUpload: opt.flashUpload , body: opt.body }; !opt.roomType && delete this.body.roomType; }; /* * video message */ Message.video = function (id) { }; Message.video.prototype.set = function (opt) { }; var _Message = function (message) { if (!this instanceof _Message) { return new _Message(message, conn); } this.msg = message; } _Message.prototype.send = function (conn) { var me = this; ////console.log(this) // 消息对象 var _send = function (message) { message.ext = message.ext || {}; message.ext.weichat = message.ext.weichat || {}; message.ext.weichat.originType = message.ext.weichat.originType || 'webim'; // //console.log('message',message) msg对象 var json = { from: conn.context.userId || '' , to: message.to , bodies: [message.body] , ext: message.ext || {} }; var jsonstr = _utils.stringify(json); var dom = StropheAll.$msg({ type: message.group || 'chat' , to: message.toJid , id: message.id , xmlns: 'jabber:client' }).c('body').t(jsonstr); //console.log("dommmmmmmm",dom) if (message.roomType) { dom.up().c('roomtype', {xmlns: 'easemob:x:roomtype', type: 'chatroom'}); } setTimeout(function () { if (typeof _msgHash !== 'undefined' && _msgHash[message.id]) { _msgHash[message.id].msg.fail instanceof Function && _msgHash[message.id].msg.fail(message.id); } }, 60000); conn.sendCommand(dom.tree(), message.id); } if (me.msg.file) { if (me.msg.body && me.msg.body.url) {// Only send msg _send(me.msg); return; } var _tmpComplete = me.msg.onFileUploadComplete; var _complete = function (data) { if (data.entities[0]['file-metadata']) { var file_len = data.entities[0]['file-metadata']['content-length']; me.msg.file_length = file_len; me.msg.filetype = data.entities[0]['file-metadata']['content-type']; if (file_len > 204800) { me.msg.thumbnail = true; } } me.msg.body = { type: me.msg.type || 'file' , url: data.uri + '/' + data.entities[0]['uuid'] , secret: data.entities[0]['share-secret'] , filename: me.msg.file.filename || me.msg.filename , size: { width: me.msg.width || 0 , height: me.msg.height || 0 } , length: me.msg.length || 0 , file_length: me.msg.file_length || 0 , filetype: me.msg.filetype } _send(me.msg); _tmpComplete instanceof Function && _tmpComplete(data, me.msg.id); }; me.msg.onFileUploadComplete = _complete; _utils.uploadFile.call(conn, me.msg); } else { if (me.msg.type === 'img') { // 添加img判断规则 wjy _send(me.msg); } else { me.msg.body = { type: me.msg.type === 'chat' ? 'txt' : me.msg.type , msg: me.msg.msg }; if (me.msg.type === 'cmd') { me.msg.body.action = me.msg.action; } else if (me.msg.type === 'loc') { me.msg.body.addr = me.msg.addr; me.msg.body.lat = me.msg.lat; me.msg.body.lng = me.msg.lng; } _send(me.msg); //console.log('ooooooooooooooooooo') } } }; exports._msg = _Message; exports.message = Message; }());