123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- import restApi from './restapi';
- function Friend(uuid, name, avatar) {
- this.uuid = uuid;
- this.name = name;
- this.avatar = avatar;
- }
- function Group(uuid, name, avatar) {
- this.uuid = uuid;
- this.name = name;
- this.avatar = avatar;
- }
- function IMService(goEasy, GoEasy) {
- //当前用户
- this.currentUser = null;
- //我的群
- this.groups = {};
- // GoEasy 模块
- this.GoEasy = GoEasy;
- //goEasy 实例对象
- this.goEasy = goEasy;
- //私聊消息记录,map格式,每个好友对应一个数组
- this.privateMessages = {};
- //群聊消息记录,map格式,每个群对应一个数组
- this.groupMessages = {};
- /*
- * 监听器们
- *
- * 可以在页面里,根据需求,重写以下监听器,
- * 便于当各种事件触发时,页面能够执行对应的响应
- *
- */
- //收到一条私聊消息
- this.onNewPrivateMessageReceive = function(friendId, message) {};
- //收到一条群聊消息
- this.onNewGroupMessageReceive = function(groupId, message) {};
- }
- //获取群成员
- IMService.prototype.getGroupMembers = function(groupId) {
- let members = restApi.findGroupMembers(groupId);
- let membersMap = {};
- members.map(item => {
- membersMap[item.uuid] = item
- });
- return membersMap;
- };
- IMService.prototype.findGroupById = function(groupId) {
- let group = restApi.findGroupById(groupId);
- return new Group(group.uuid, group.name, group.avatar);
- };
- IMService.prototype.findFriendById = function(userId) {
- let user = restApi.findUserById(userId);
- return new Friend(user.uuid, user.name, user.avatar);
- };
- IMService.prototype.getGroupMessages = function(groupId) {
- if (!this.groupMessages[groupId]) {
- this.groupMessages[groupId] = [];
- }
- return this.groupMessages[groupId]
- };
- IMService.prototype.getPrivateMessages = function(friendId) {
- if (!this.privateMessages[friendId]) {
- this.privateMessages[friendId] = [];
- }
- return this.privateMessages[friendId];
- };
- //连接GoEasy
- IMService.prototype.connect = function(currentUser) {
- this.currentUser = currentUser;
- let userData = {
- name: this.currentUser.name,
- avatar: this.currentUser.avatar
- }
- //初始化相关的监听器
- this.initialListeners();
- this.goEasy.connect({
- id: this.currentUser.uuid,
- data: userData,
- onSuccess: function() {
- //连接成功
- console.log("GoEasy connect successfully.")
- },
- onFailed: function(error) {
- //连接失败
- console.log("Failed to connect GoEasy, code:" + error.code + ",error:" + error.content);
- },
- onProgress: function(attempts) { //连接或自动重连中
- console.log("GoEasy is connecting", attempts);
- }
- });
- // this.subscribeGroupMessage(currentUser);
- };
- IMService.prototype.subscribeGroupMessage = function() {
- let groups = restApi.findGroups(this.currentUser);
- let groupIds = groups.map(item => item.uuid);
- this.goEasy.im.subscribeGroup({
- groupIds: groupIds,
- onSuccess: function() {
- //订阅成功
- console.log('订阅群消息成功');
- },
- onFailed: function(error) {
- //订阅失败
- console.log('订阅群消息失败')
- }
- });
- }
- //初始化监听器
- IMService.prototype.initialListeners = function() {
- //监听私聊消息
- this.goEasy.im.on(this.GoEasy.IM_EVENT.PRIVATE_MESSAGE_RECEIVED, (message) => {
- //更新私聊消息记录
- let friendId;
- if (this.currentUser.uuid === message.senderId) {
- friendId = message.receiverId;
- } else {
- friendId = message.senderId;
- }
- let friendMessages = this.getPrivateMessages(friendId);
- friendMessages.push(message);
- //如果页面传入了相应的listener,执行listener
- this.onNewPrivateMessageReceive(friendId, message);
- });
- //监听群聊消息
- this.goEasy.im.on(this.GoEasy.IM_EVENT.GROUP_MESSAGE_RECEIVED, (message) => {
- let groupId = message.groupId;
- //更新群聊消息记录
- let groupMessages = this.getGroupMessages(groupId);
- groupMessages.push(message);
- //如果页面传入了相应的listener,执行listener
- this.onNewGroupMessageReceive(groupId, message);
- })
- };
- export default IMService;
|