This commit is contained in:
luyuan 2020-08-08 15:40:48 +08:00
parent 597c92e9cd
commit 9e96eeb575
Signed by: theluyuan
GPG Key ID: A7972FD973317FF3
3 changed files with 262 additions and 39 deletions

View File

@ -1,10 +1,14 @@
<script> <script>
import { mapMutations, mapState } from 'vuex'; import { mapMutations, mapState } from 'vuex';
export default { export default {
globalData: {
im: {}
},
computed: { computed: {
...mapState(["hasLogin"]) ...mapState(["hasLogin"])
}, },
onLaunch() { onLaunch() {
getApp().globalData.im = this.imService
// token // token
uni.getStorage({ uni.getStorage({
key: "token", key: "token",

View File

@ -424,30 +424,14 @@ export default {
id : a.rid + "", id : a.rid + "",
name : a.rid + "" name : a.rid + ""
}; };
that.chatRoomService = getApp().globalData.im
console.log(room,currentUser) console.log(room,currentUser)
//构造chatRoomService //构造chatRoomService
that.chatRoomService = new ChatRoomService(room, currentUser); that.chatRoomService.subscribeRoomMessage(room,currentUser)
that.chatRoomService.initialWhenNewMessage(that.whenNewMessage);
that.chatRoomService.initialWhenNewMessage(that.whenNewMessage); //获取当前聊天室数据
that.chatRoomService.connectGoEasyIM(); that.room = that.chatRoomService.room;
//获取当前聊天室数据
that.room = that.chatRoomService.room;
setTimeout(function() {
that.chatRoomService.quitRoom();
that.chatRoomService = {}
}, 1000);
setTimeout(function(){
that.chatRoomService = new ChatRoomService(room, currentUser);
that.chatRoomService.initialWhenNewMessage(that.whenNewMessage);
that.chatRoomService.connectGoEasyIM();
//获取当前聊天室数据
that.room = that.chatRoomService.room;
console.log(that.room.onlineUsers)
}, 2000);
} }
}) })
} catch (error) { } catch (error) {
@ -465,7 +449,7 @@ export default {
}, },
methods:{ methods:{
sendMessage (messageType, content) {//发送消息 sendMessage (messageType, content) {//发送消息
console.log(123) console.log(this.room,this.room.id,messageType, content)
if(content == "" && messageType == 0) return; if(content == "" && messageType == 0) return;
var message = { var message = {
senderNickname : this.room.currentUser.nickname , senderNickname : this.room.currentUser.nickname ,

View File

@ -69,6 +69,14 @@ function IMService() {
this.onFriendListChange = function (friends) {}; this.onFriendListChange = function (friends) {};
//群列表发生改变 //群列表发生改变
this.onGroupListChange = function (groups) {}; this.onGroupListChange = function (groups) {};
this.whenNewMessage = function () {
};
this.whenOnlineUserChange = function () {
};
} }
//登录 //登录
@ -354,23 +362,23 @@ IMService.prototype.initialIMListeners = function () {
this.onNewPrivateMessageReceive(friendId, message); this.onNewPrivateMessageReceive(friendId, message);
}); });
//监听群聊消息 // //监听群聊消息
this.im.on(GoEasyIM.EVENT.GROUP_MESSAGE_RECEIVED, (message) => { // this.im.on(GoEasyIM.EVENT.GROUP_MESSAGE_RECEIVED, (message) => {
let groupId = message.groupId; // let groupId = message.groupId;
//群未读消息+1 // //群未读消息+1
let group = this.groups[groupId]; // let group = this.groups[groupId];
group.unReadMessage++; // group.unReadMessage++;
removeGroupPendingMessage(this, groupId, message); // removeGroupPendingMessage(this, groupId, message);
//如果页面传入了相应的listener执行listener // //如果页面传入了相应的listener执行listener
this.onGroupListChange(this.groups); // this.onGroupListChange(this.groups);
//更新群聊消息记录 // //更新群聊消息记录
let groupMessages = this.getGroupMessages(groupId); // let groupMessages = this.getGroupMessages(groupId);
let sentMessages = groupMessages.sentMessages; // let sentMessages = groupMessages.sentMessages;
sentMessages.push(message); // sentMessages.push(message);
//如果页面传入了相应的listener执行listener // //如果页面传入了相应的listener执行listener
this.onNewGroupMessageReceive(groupId, message); // this.onNewGroupMessageReceive(groupId, message);
}) // })
}; };
@ -602,4 +610,231 @@ function removeGroupPendingMessage(imService,groupId, message){
} }
} }
//下面是合并的
//用户
function User(id, nickname, avatar) {
this.id = id;
this.nickname = nickname;
this.avatar = avatar;
}
//消息
function Message(senderUserId, senderNickname, content, type) {
this.senderNickname = senderNickname;
this.senderUserId = senderUserId;
this.content = content;
this.type = type
}
//聊天室
function Room(id, name, currentUser) {
this.id = id;
this.name = name;
this.currentUser = currentUser;
this.onlineUsers = {
count: 0,
users: []
};
this.messages = [];
this.MessageType = {
CHAT: 0,//文字聊天
PROP: 1//道具
};
this.Prop = {
HEART: 0,//桃心
ROCKET: 1//火箭
};
}
IMService.prototype.initialWhenNewMessage = function (whenNewMessage) {
this.whenNewMessage = whenNewMessage;
};
IMService.prototype.initialWhenOnlineUserChange = function (whenOnlineUserChange) {
this.whenOnlineUserChange = whenOnlineUserChange;
};
//监听新消息
IMService.prototype.listenerNewMessage = function () {
this.im.on(GoEasyIM.EVENT.GROUP_MESSAGE_RECEIVED, (message) => {
var content = JSON.parse(message.payload.text);
this.addNewMessage(message);
this.whenNewMessage(content);
})
}
IMService.prototype.addNewMessage = function (message) {
var content = JSON.parse(message.payload.text);
let messageContent = "";
//聊天消息
if (content.type == this.room.MessageType.CHAT) {
messageContent = content.content;
}
//道具消息
if (content.type == this.room.MessageType.PROP) {
if (content.content == this.room.Prop.ROCKET) {
messageContent = "送出了一枚大火箭";
}
if (content.content == this.room.Prop.HEART) {
messageContent = "送出了一个大大的比心";
}
}
//添加消息
let newMessage = new Message(message.senderId, content.senderNickname, messageContent);
this.room.messages.push(newMessage);
};
//监听用户上下线
IMService.prototype.listenerGroupPresence = function () {
this.im.on(GoEasyIM.EVENT.GROUP_PRESENCE, (event) => {
//更新在线用户数
this.room.onlineUsers.count = event.groupOnlineCount;
if (event.action == 'join' || event.action == 'online') {
let userData = JSON.parse(event.userData);
//添加新用户
let user = new User(event.userId, userData.nickname, userData.avatar);
//添加在线用户,避免用户重复
if (!this.room.onlineUsers.users.find(item => item.id == event.userId)) {
this.room.onlineUsers.users.push(user);
}
//添加进入房间的消息
let message = new Message(event.userId, userData.nickname, " 进入房间", this.room.MessageType.CHAT);
this.room.messages.push(message);
} else {
let offlineUserIndex = this.room.onlineUsers.users.findIndex(item => item.id == event.userId);
if (offlineUserIndex > -1) {
//将离开的用户从onlineUsers中删掉
let offlineUser = Object.assign(this.room.onlineUsers.users[offlineUserIndex]);
this.room.onlineUsers.users.splice(offlineUserIndex, 1);
//添加离开消息
let message = new Message(offlineUser.id, offlineUser.nickname, " 离开房间", this.room.MessageType.CHAT)
this.room.messages.push(message);
}
}
this.whenOnlineUserChange(this.room.onlineUsers);
})
};
//查询和初始化在线用户列表和在线用户数
IMService.prototype.initialOnlineUsers = function (roomId) {
let self = this;
//查询最新上线的用户列表
this.im.groupHereNow(roomId)
.then(result => {
if (result.code == 200) {
let users = [];
result.content && result.content.map(function (onlineUser) {
let userData = JSON.parse(onlineUser.userData);
let user = new User(onlineUser.userId, userData.nickname, userData.avatar);
users.push(user);
});
self.room.onlineUsers = {
users: users
};
}
}).catch(e => {
if (e.code == 401) {
console.log("您还没有开通用户在线状态提醒登录goeasy->我的应用->查看详情->高级功能,自助开通.");
} else {
console.log(e);
}
});
//获取聊天室在线用户数
this.im.groupOnlineCount(roomId)
.then(result => {
this.room.onlineUsers.count = result.content.onlineCount;
}).catch(e => {
console.log(e)
})
};
//订阅聊天室成员上下线
IMService.prototype.subscribePresence = function (roomId) {
this.im.subscribeGroupPresence([roomId])
.then(() => {
console.log('成员上下线订阅成功')
}).catch(e => {
console.log(e)
})
}
//订阅聊天室消息
IMService.prototype.subscribeRoomMessage = function (room, user) {
this.room = new Room(room.id, room.name, user);
//监听上下线提醒
this.listenerGroupPresence();
//监听新消息
this.listenerNewMessage();
//订阅用户上下线事件
this.subscribePresence(this.room.id);
//订阅聊天室消息
// this.subscribeRoomMessage(this.room.id);
this.im.subscribeGroup([this.room.id])
.then(result => {
console.log('消息订阅成功')
}).catch(e => {
console.log(e,'失败')
})
}
//历史消息
IMService.prototype.initialChatHistory = function (roomId) {
var self = this;
this.im.history({
groupId: roomId
}).then(res => {
res.content.forEach(function (message) {
self.addNewMessage(message);
})
}).catch(function (error) {
if (error.code == 401) {
console.log("您还没有开通历史消息的权限登录goeasy->我的应用->查看详情->高级功能,自助开通.");
} else {
console.log(error);
}
})
};
//发送消息
IMService.prototype.sendMessages = function (roomId, content) {
var contentMessage = {
text: JSON.stringify(content)
};
let message = this.im.createTextMessage(contentMessage);
this.im.sendGroupMessage(roomId, message)
.then(() => {
console.log('消息发送成功')
}).catch(e => {
console.log(e);
})
};
//退出聊天室
IMService.prototype.quitRoom = function (roomId) {
this.im.disconnect()
};
export default IMService; export default IMService;