123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- import GoEasyIM from '@/common/goeasy-im-1.3.1.js';
- function Friend(uuid, name, avatar) {
- this.uuid = uuid;
- this.name = name;
- this.avatar = avatar;
- }
- function CurrentUser(uuid, name, avatar) {
- this.uuid = uuid;
- this.name = name;
- this.avatar = avatar;
- }
- //初始化
- function IMService() {
- this.im = GoEasyIM.getInstance({
- host: 'hangzhou.goeasy.io', //应用所在的区域地址: [hangzhou.goeasy.io, 新加坡暂不支持IM,敬请期待]
- appkey: "BC-eef530bc08134a22b2a58ec8f8da0b25"
- // appkey: "BC-f420edb1a2c24b97ad43a55299987a85"
- });
- console.log(this.im)
- //当前“我”
- this.currentUser = null;
- //我的好友
- this.friends = {};
- //私聊消息记录,map格式,每个好友对应一个数组
- this.privateMessages = {};
- //收到一条私聊消息
- this.onNewPrivateMessageReceive = function(friendId, message) {};
- this.onConversationsUpdate = function(conversations) {};
- }
- IMService.prototype.login = function(user) {
- console.log(user)
- if (user) {
- //初始化当前用户
- this.currentUser = new CurrentUser(user.id, user.nickname, user.avatar);
- return true;
- } else {
- return false;
- }
- };
- IMService.prototype.getPrivateMessages = function(friendId) {
- console.log(this.privateMessages)
- if (!this.privateMessages[friendId]) {
- this.privateMessages[friendId] = {
- sentMessages: [],
- pendingMessages: []
- };
- }
- return this.privateMessages[friendId]
- };
- //连接GoEasy
- IMService.prototype.connectIM = function() {
- this.initialIMListeners();
- this.im.connect({
- id: this.currentUser.uuid,
- data: {
- avatar: this.currentUser.avatar,
- name: this.currentUser.name
- }
- }).then(() => {
- console.log('connect成功')
- }).catch(error => {
- console.log('connect失败,请确保网络正常,appkey和host正确,code:' + error.code + " content:" + error.content);
- });
- };
- IMService.prototype.initialIMListeners = function() {
- this.im.on(GoEasyIM.EVENT.CONNECTED, () => {
- console.log('连接成功.')
- });
- this.im.on(GoEasyIM.EVENT.DISCONNECTED, () => {
- console.log('连接断开.')
- });
- this.im.on(GoEasyIM.EVENT.CONNECTING, (times) => {
- console.log('连接中', times);
- });
- //监听会话列表
- this.im.on(GoEasyIM.EVENT.CONVERSATIONS_UPDATED, (conversations) => {
- this.conversations = conversations;
- this.onConversationsUpdate(this.conversations)
- });
- //监听私聊消息
- this.im.on(GoEasyIM.EVENT.PRIVATE_MESSAGE_RECEIVED, (message) => {
- //更新私聊消息记录
- let friendId;
- if (this.currentUser.uuid == message.senderId) {
- friendId = message.receiverId;
- } else {
- friendId = message.senderId;
- }
- removePrivatePendingMessage(this, friendId, message);
- let friendMessages = this.getPrivateMessages(friendId);
- friendMessages.sentMessages.push(message);
- //如果页面传入了相应的listener,执行listener
- this.onNewPrivateMessageReceive(friendId, message);
- });
- };
- //加载单聊历史消息
- IMService.prototype.loadPrivateHistoryMessage = function(friendId, timeStamp) {
- return new Promise((resolve, reject) => {
- this.im.history({
- friendId: friendId,
- lastTimestamp: timeStamp
- }).then(result => {
- let history = result.content;
- let privateMessages = this.getPrivateMessages(friendId);
- let friendMessages = privateMessages.sentMessages;
- for (let i = history.length - 1; i >= 0; i--) {
- friendMessages.unshift(history[i])
- }
- resolve(friendMessages)
- }).catch(error => {
- if (error.code == 401) {
- console.log("您尚未开通历史消息,请登录GoEasy,查看应用详情里自助启用.");
- }
- reject(error)
- });
- })
- };
- function removePrivatePendingMessage(imService, friendId, message) {
- let privateMessages = imService.getPrivateMessages(friendId);
- let pendingMessages = privateMessages.pendingMessages;
- let pendingMessageIndex = pendingMessages.findIndex(item => item.messageId == message.messageId);
- if (pendingMessageIndex > -1) {
- pendingMessages.splice(pendingMessageIndex, 1);
- }
- }
- //发送私聊消息
- IMService.prototype.sendPrivateTextMessage = function(friendId, text) {
- let textMessage = this.im.createTextMessage({
- text: text
- });
- this.sendPrivateMessage(friendId, textMessage);
- };
- //私聊图片消息
- IMService.prototype.sendPrivateImageMessage = function(friendId, imageFile) {
- let imageMessage = this.im.createImageMessage({
- file: imageFile,
- onProgress: function(progress) {
- console.log(progress)
- }
- });
- this.sendPrivateMessage(friendId, imageMessage);
- };
- //私聊视频消息
- IMService.prototype.sendPrivateVideoMessage = function(friendId, videoFile) {
- let videoMessage = this.im.createVideoMessage({
- file: videoFile,
- onProgress: function(progress) {
- console.log(progress)
- }
- });
- this.sendPrivateMessage(friendId, videoMessage);
- };
- IMService.prototype.sendPrivateAudioMessage = function(friendId, audiofile) {
- let audioMessage = this.im.createAudioMessage({
- file: audiofile,
- onProgress: function(progress) {
- console.log(progress)
- }
- });
- this.sendPrivateMessage(friendId, audioMessage);
- };
- //发送私聊消息
- IMService.prototype.sendPrivateMessage = function(friendId, message) {
- console.log(friendId, message)
- //添加到消息中
- let privateMessages = this.getPrivateMessages(friendId);
- privateMessages.pendingMessages.push(message);
- //发送
- this.im.sendPrivateMessage(friendId, message)
- .then((res) => {
- console.log(res)
- })
- .catch(e => {
- console.log(e)
- })
- };
- IMService.prototype.markPrivateMessageAsRead = function(friendId) {
- this.im.markPrivateMessageAsRead(friendId)
- .then(res => {
- console.log('标记为已读成功')
- })
- .catch(e => {
- console.log(e)
- })
- };
- IMService.prototype.disconnect = function() {
- return this.im.disconnect()
- };
- IMService.prototype.latestConversations = function() {
- let promise = this.im.latestConversations();
- promise.then((conversations) => {
- this.conversations = conversations
- });
- return promise
- };
- IMService.prototype.topPrivateConversation = function(userId, isTop) {
- let promise = this.im.topPrivateConversation(userId, isTop);
- promise.then(res => {
- console.log(res)
- }).catch(e => {
- console.log(e)
- });
- return promise
- };
- IMService.prototype.removePrivateConversation = function(friendId) {
- let promise = this.im.removePrivateConversation(friendId);
- promise.then(res => {
- console.log(res)
- }).catch(e => {
- console.log(e)
- });
- return promise
- };
- IMService.prototype.sendCustomMessage = function(id, type, options) {
- let customMessage = this.im.createCustomMessage(options);
- let promise = null;
- if (type == 'private') {
- promise = this.im.sendPrivateMessage(id, customMessage)
- } else {
- promise = this.im.sendGroupMessage(id, customMessage)
- }
- return promise
- };
- export default IMService;
|