This commit is contained in:
2023-09-27 18:04:38 +08:00
parent ba84ea2bc7
commit 295cd5c925
9 changed files with 269 additions and 190 deletions

View File

@@ -61,9 +61,8 @@ public class NettyServerHandler extends SimpleChannelInboundHandler<Message> {
@Override @Override
protected void channelRead0(ChannelHandlerContext ctx, Message msg) throws Exception { protected void channelRead0(ChannelHandlerContext ctx, Message msg) throws Exception {
logger.info("***********************收到消息:{}", msg); // logger.info("***********************收到消息:{}", msg);
logger.info("***********************收到消息:{}", msg); // logger.info("***********************收到消息:{}", msg);
logger.info("***********************收到消息:{}", msg);
Integer command = msg.getMessageHeader().getCommand(); Integer command = msg.getMessageHeader().getCommand();
@@ -149,6 +148,9 @@ public class NettyServerHandler extends SimpleChannelInboundHandler<Message> {
ctx.channel().attr(AttributeKey.valueOf(Constants.ReadTime)).set(System.currentTimeMillis()); ctx.channel().attr(AttributeKey.valueOf(Constants.ReadTime)).set(System.currentTimeMillis());
}else if(command == MessageCommand.MSG_P2P.getCommand() }else if(command == MessageCommand.MSG_P2P.getCommand()
|| command == GroupEventCommand.MSG_GROUP.getCommand()){ || command == GroupEventCommand.MSG_GROUP.getCommand()){
logger.info("***********************收到单聊或者群聊消息:{}", msg);
try { try {
String toId = ""; String toId = "";
CheckSendMessageReq req = new CheckSendMessageReq(); CheckSendMessageReq req = new CheckSendMessageReq();

View File

@@ -1,9 +1,9 @@
export default class config{ export default class config{
static getBaseApiUrl(){ static getBaseApiUrl(){
return process.env.NODE_ENV === 'development' ? 'http://192.168.1.117:8989' :'http://www.shudong.xyz/shudong_api/'; return process.env.NODE_ENV === 'development' ? 'http://192.168.1.117:8989' :'http://192.168.1.117:8989';
} }
static getImApiUrl(){ static getImApiUrl(){
return process.env.NODE_ENV === 'development' ? 'http://192.168.1.117:28000/v1' :'http://www.shudong.xyz/shudong_api/'; return process.env.NODE_ENV === 'development' ? 'http://192.168.1.117:28000/v1' :'http://192.168.1.117:28000/v1';
} }
static getImAppId(){ static getImAppId(){
return 10000; return 10000;

View File

@@ -265,12 +265,14 @@ export default {
}) { }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
http.request({ http.request({
url:url+'&pageNum='+(queryParams.refreshing ? 1 : queryParams.pageNum) +'&pageSize=' +queryParams.pageSize, url: url + '&pageNum=' + (queryParams.refreshing ? 1 : queryParams.pageNum) +
'&pageSize=' + queryParams.pageSize,
success: res => { success: res => {
if (res.data.code == 200) { if (res.data.code == 200) {
let list = []; let list = [];
let data = res.data.rows; let data = res.data.rows;
if (queryParams.refreshing&&res.data.rows == ''||queryParams.refreshing&&res.data.rows.length==0) { if (queryParams.refreshing && res.data.rows == '' || queryParams
.refreshing && res.data.rows.length == 0) {
queryParams.status = 'noMore' queryParams.status = 'noMore'
resolve({ resolve({
queryParams: queryParams, queryParams: queryParams,
@@ -325,16 +327,24 @@ export default {
console.log(resbody) console.log(resbody)
var pushType = resbody.pushType //推送类型 var pushType = resbody.pushType //推送类型
if (pushType == 'MSG') { if (pushType == 'MSG') {
/*
if(resbody.msgContent.msgType=='TRTC_VOICE_START'||resbody.msgContent.msgType=='TRTC_VIDEO_START'){ if(resbody.msgContent.msgType=='TRTC_VOICE_START'||resbody.msgContent.msgType=='TRTC_VIDEO_START'){
//音视频开始拦截 //音视频开始拦截
return return
} }
var userId=resbody.fromInfo.userId */
var userId = resbody.userId
var windowType = 'SINGLE' var windowType = 'SINGLE'
/*
if(resbody.groupInfo.userId){ if(resbody.groupInfo.userId){
userId=resbody.groupInfo.userId userId=resbody.groupInfo.userId
windowType='GROUP' windowType='GROUP'
} }
*/
const _userId = uni.getStorageSync("userId")
debugger
this.pushInMsg({ this.pushInMsg({
type: resbody.msgContent.msgType == 'ALERT' ? 3 : 1, //显示类型 1左侧 2右侧 3中间 type: resbody.msgContent.msgType == 'ALERT' ? 3 : 1, //显示类型 1左侧 2右侧 3中间
msgContent: resbody.msgContent.content, //msg内容 msgContent: resbody.msgContent.content, //msg内容
@@ -343,12 +353,13 @@ export default {
time: resbody.createTime, //时间 time: resbody.createTime, //时间
fromInfo: resbody.fromInfo, //来源信息 fromInfo: resbody.fromInfo, //来源信息
groupInfo: resbody.groupInfo, //群信息 groupInfo: resbody.groupInfo, //群信息
userId: userId,//talktoId userId: _userId, //talktoId
personId: resbody.fromInfo.userId, personId: resbody.fromInfo.userId,
msgId: resbody.msgId, //消息Id msgId: resbody.msgId, //消息Id
disturb: resbody.msgContent.disturb, //是否静默消息 disturb: resbody.msgContent.disturb, //是否静默消息
top: resbody.msgContent.top //是否置顶 top: resbody.msgContent.top //是否置顶
}) })
return return
} }
if (pushType == 'NOTICE') { //红点通知等 if (pushType == 'NOTICE') { //红点通知等
@@ -444,25 +455,36 @@ export default {
if (msgType == 'TRTC_VIDEO_END') { if (msgType == 'TRTC_VIDEO_END') {
msgTypeLabel = '[视频通话]' msgTypeLabel = '[视频通话]'
} }
console.log(userId)
debugger
store.dispatch('createChatObj', { store.dispatch('createChatObj', {
userId: userId, userId: userId,
windowType: windowType, windowType: windowType,
}).then(res => { }).then(res => {
debugger
var localData = res.data var localData = res.data
store.dispatch('getchatDatalist'); store.dispatch('getchatDatalist');
store.dispatch('getChatList'); store.dispatch('getChatList');
var chatWindowData = store.state.chatDatalist[userId].list var chatWindowData = store.state.chatDatalist[userId].list
var chatListInfo = store.state.chatlist[userId] var chatListInfo = store.state.chatlist[userId]
// 找到数组中对象属性值一样的对象并返回 // 找到数组中对象属性值一样的对象并返回
function arrfindobject({arr,object,key}){ function arrfindobject({
arr,
object,
key
}) {
var result = arr.find(item => { var result = arr.find(item => {
return item[key] == object[key] return item[key] == object[key]
}); });
return result return result
} }
var same=arrfindobject({arr:chatWindowData,object:{ var same = arrfindobject({
arr: chatWindowData,
object: {
msgId: msgId msgId: msgId
},key:'msgId'}) },
key: 'msgId'
})
if (same) { if (same) {
return return
} }
@@ -646,6 +668,40 @@ export default {
type: 3 type: 3
}; };
var msgSendType = 'wating'; var msgSendType = 'wating';
//开始发送消息
store.dispatch('sendMsg', {
userId: userId,
data: msgOnlie
});
// TODO
// 发送完成之后设置消息状态
// msgSendType = 'error';
msgOffline.sendtype = msgSendType;
msgOffline.msgId = "1231"
msgNotSend.content = msgOnlie.content;
msgList.content = msgOnlie.content;
chatWindowData.push(msgOffline);
if (msgSendType == 'error') {
chatWindowData.push(msgNotSend);
}
store.dispatch('updateChatById', {
userId: userId,
data: chatWindowData
});
store.dispatch('updateChatListInfoById', {
userId: userId,
data: msgList
});
store.dispatch('tabBarpull');
store.dispatch('updateChatDataState', userId);
return false;
http.request({ http.request({
url: url, url: url,
method: 'POST', method: 'POST',

View File

@@ -1,7 +1,7 @@
import config from "@/common/config.js" import config from "@/common/config.js"
let timer = null let timer = null
let retimer = null let retimer = null
import store from '../store'
import * as sdk from "@/common/imSdk/lim-sdk.js"; import * as sdk from "@/common/imSdk/lim-sdk.js";
@@ -30,15 +30,35 @@ export default {
}, },
onTestMessage: (e) => { onTestMessage: (e) => {
console.log("onTestMessage " + e); console.log("onTestMessage " + e);
store.dispatch('onP2PMessage',e)
}, },
onP2PMessage: (e) => { onP2PMessage: (e) => {
console.log("onP2PMessage " + e); console.log("onP2PMessage " + e);
e = JSON.parse(e) e = JSON.parse(e)
e.pushType="TEXT" e.data.pushType="MSG"
e.data.msgContent={
msgType:"UNKOWN",
content:e.data.messageBody,
disturb:false,
top:false,
}
e.data.windowType="SINGLE"
e.data.createTime=e.data.messageTime;
e.data.fromInfo={
userId:e.data.fromId
};
e.data.groupInfo={};
e.data.msgId=e.data.messageId;
debugger
uni.$emit('onP2PMessage', e.data); uni.$emit('onP2PMessage', e.data);
store.dispatch('onP2PMessage',e.data)
}, },
onLogin: (uid) => { onLogin: (uid) => {
console.log("用户" + uid + "登陆sdk成功"); console.log("用户" + uid + "登陆sdk成功");
} }
}; };
@@ -54,6 +74,7 @@ export default {
console.log(lim) console.log(lim)
// 防止多次建立ws链接貌似还没有生效需要检查
if (this.socketTask != null) { if (this.socketTask != null) {
return false return false
} }

View File

@@ -1,7 +1,7 @@
{ {
"name" : "微聊", "name" : "IM",
"appid" : "__UNI__CA19A2D", "appid" : "__UNI__1A208D0",
"description" : "考拉Team微聊", "description" : "HS-IM",
"versionName" : "1.2.1", "versionName" : "1.2.1",
"versionCode" : 121, "versionCode" : 121,
"developer" : { "developer" : {

View File

@@ -9,9 +9,10 @@ const store = new Vuex.Store({
import * as sdk from "@/common/imSdk/lim-sdk.js"; import * as sdk from "@/common/imSdk/lim-sdk.js";
import lim from "@/common/imSdk/sdk-bridge.js"; import lim from "@/common/imSdk/sdk-bridge.js";
const _im=lim.lim.im
// #ifdef VUE3 // #ifdef VUE3
import { createStore } from 'vuex' import { createStore } from 'vuex'
const store = createStore({ const store = createStore({
@@ -52,6 +53,21 @@ import { createStore } from 'vuex'
} }
}, },
actions: { actions: {
onP2PMessage(context,data){
console.log("========================store 收到信息")
console.log("========================store 收到信息")
console.log("========================store 收到信息")
console.error(data)
publicFc.getPush(data)
},
sendMsg(context,data){
console.log("========================")
console.log("========================")
console.log("========================")
console.error(data)
_im.sendP2PMessage(_im.createP2PTextMessage(data.userId,data.data.content))
},
updateChatDataState(context,data){ updateChatDataState(context,data){
context.state.chatDataState++ context.state.chatDataState++
context.state.chatDataUserId=data context.state.chatDataUserId=data
@@ -118,15 +134,19 @@ import { createStore } from 'vuex'
context.commit('update_ChatList',data) context.commit('update_ChatList',data)
}, },
updateChatListInfoById(context,data) {//修改聊天记录 updateChatListInfoById(context,data) {//修改聊天记录
console.log("修改聊天记录 2")
var getKey=data.userId var getKey=data.userId
var retdata=publicFc.getKeyObjectStorage(context.state.userInfo.userId+'_'+'chatlistData') var retdata=publicFc.getKeyObjectStorage(context.state.userInfo.userId+'_'+'chatlistData')
retdata[getKey]=data.data retdata[getKey]=data.data
uni.setStorageSync(context.state.userInfo.userId+'_'+'chatlistData', JSON.stringify(retdata)); uni.setStorageSync(context.state.userInfo.userId+'_'+'chatlistData', JSON.stringify(retdata));
}, },
createChatObj(context,data){ createChatObj(context,data){
console.log("修改聊天记录 3")
console.log("context.state.userInfo.userId:",context.state.userInfo.userId)
console.log("data.userId:",data.userId)
var userId=data.userId var userId=data.userId
var windowType=data.windowType var windowType=data.windowType
debugger
//初始化聊天记录 //初始化聊天记录
var data2=publicFc.getKeyObjectStorage(context.state.userInfo.userId+'_'+'chatlistData') var data2=publicFc.getKeyObjectStorage(context.state.userInfo.userId+'_'+'chatlistData')
if(!data2[userId]){ if(!data2[userId]){
@@ -145,7 +165,7 @@ import { createStore } from 'vuex'
// console.warn(res) // console.warn(res)
// }) // })
lim.lim.im.getSingleUserInfo(userId).then((res)=>{ _im.getSingleUserInfo(userId).then((res)=>{
console.log(res.data) console.log(res.data)
console.log(res.data) console.log(res.data)
console.log(res.data) console.log(res.data)
@@ -155,7 +175,7 @@ import { createStore } from 'vuex'
data1[userId]={ data1[userId]={
fromInfo:{ fromInfo:{
nickName: detail.nickName, nickName: detail.nickName,
portrait: detail.portrait, portrait: detail.photo,
userId: detail.userId, userId: detail.userId,
userType:detail.userType userType:detail.userType
}, },
@@ -169,7 +189,7 @@ import { createStore } from 'vuex'
userId: detail.userId, userId: detail.userId,
personId: context.state.userInfo.userId, personId: context.state.userInfo.userId,
nickName: detail.nickName, nickName: detail.nickName,
portrait: detail.portrait, portrait: detail.photo,
content: '', content: '',
time: publicFc.getNewDate('format',true), time: publicFc.getNewDate('format',true),
num: 0, num: 0,

View File

@@ -174,7 +174,7 @@
onLoad(e) { onLoad(e) {
// // 监听接收聊天信息 // // 监听接收聊天信息
uni.$on('onP2PMessage', this.onMessage) // uni.$on('onP2PMessage', this.onMessage)
this.talkTo = e; this.talkTo = e;
// 根据Id // 根据Id
@@ -263,27 +263,6 @@
}, },
methods: { methods: {
onMessage(message) { onMessage(message) {
console.log('[聊天页] 监听接收聊天信息', message);
if (message.fromId != this.talkTo.userId) {
return;
}
console.log('[聊天页] 监听接收聊天信息', message);
this.$fc.getPush(data);
// var messageBody = message
// let msg = {
// userId: message.fromId,
// avatar: "/static/images/userpic.png",
// data: messageBody.messageBody == '' ? '空消息' : messageBody.messageBody,
// nickname: message.fromId,
// type: "text",
// createTime: message.messageTime / 1000,
// isRemove: false
// }
// this.list.push(msg)
}, },
addMsg(e) { addMsg(e) {

View File

@@ -35,26 +35,26 @@
var list=[ var list=[
{ {
name:"测试18200702230", name:"测试18200702230",
avatar:"item.portrait", avatar:"https://shudong2022.oss-cn-hangzhou.aliyuncs.com/common/user/logo.png",
userId:"18200702230", userId:"18200702230",
userType:"item.userType", userType:"item.userType",
chatNo:"item.chatNo" chatNo:"item.chatNo"
}, },
{ {
name:"测试18200000000", name:"测试18200000000",
avatar:"item.portrait", avatar:"https://shudong2022.oss-cn-hangzhou.aliyuncs.com/common/user/logo.png",
userId:"18200000000", userId:"18200000000",
userType:"item.userType", userType:"item.userType",
chatNo:"item.chatNo" chatNo:"item.chatNo"
},{ },{
name:"测试18200000001", name:"测试18200000001",
avatar:"item.portrait", avatar:"https://shudong2022.oss-cn-hangzhou.aliyuncs.com/common/user/logo.png",
userId:"18200000001", userId:"18200000001",
userType:"item.userType", userType:"item.userType",
chatNo:"item.chatNo" chatNo:"item.chatNo"
},{ },{
name:"测试lld3", name:"测试lld3",
avatar:"item.portrait", avatar:"https://shudong2022.oss-cn-hangzhou.aliyuncs.com/common/user/logo.png",
userId:"lld3", userId:"lld3",
userType:"item.userType", userType:"item.userType",
chatNo:"item.chatNo" chatNo:"item.chatNo"

View File

@@ -154,6 +154,7 @@ export class ImClient {
let bodyLen = byteBuffer[1];//解析bodylen let bodyLen = byteBuffer[1];//解析bodylen
let unpack = bytebuf.vstring(null, bodyLen).unpack();//解析出字符串 let unpack = bytebuf.vstring(null, bodyLen).unpack();//解析出字符串
let msgBody = unpack[2]; let msgBody = unpack[2];
console.log("sdk收到服务端数据 command" + command)
console.log("sdk收到服务端数据" + msgBody) console.log("sdk收到服务端数据" + msgBody)
if (command === MessageCommand.MSG_P2P) { if (command === MessageCommand.MSG_P2P) {