mirror of
https://gitee.com/lijingbo-2021/open-anylink-web.git
synced 2026-05-10 17:35:18 +00:00
216 lines
5.3 KiB
JavaScript
216 lines
5.3 KiB
JavaScript
import { Msg, Header, MsgType, Body } from '@/proto/msg'
|
||
import { proto } from '@/const/msgConst'
|
||
import { useUserStore } from '@/stores'
|
||
import { v4 as uuidv4 } from 'uuid'
|
||
|
||
export const chatConstructor = ({ sessionId, remoteId, content, contentType, sequence }) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.CHAT,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
toId: remoteId,
|
||
sessionId: sessionId,
|
||
content: content,
|
||
contentType: contentType,
|
||
seq: sequence
|
||
})
|
||
const chatMsg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(chatMsg).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const groupChatConstructor = ({ sessionId, remoteId, content, contentType, sequence }) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.GROUP_CHAT,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
sessionId: sessionId,
|
||
groupId: remoteId,
|
||
content: content,
|
||
contentType: contentType,
|
||
seq: sequence
|
||
})
|
||
const msg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(msg).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const heartBeatConstructor = () => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.HEART_BEAT,
|
||
isExtension: false
|
||
})
|
||
const heartBeat = Msg.create({ header: header })
|
||
const payload = Msg.encode(heartBeat).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const helloConstructor = () => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.HELLO,
|
||
isExtension: false
|
||
})
|
||
const hello = Msg.create({ header: header })
|
||
const payload = Msg.encode(hello).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const chatReadConstructor = ({ sessionId, remoteId, content }) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.CHAT_READ,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
toId: remoteId,
|
||
sessionId: sessionId,
|
||
content: content,
|
||
seq: uuidv4()
|
||
})
|
||
const chatMsg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(chatMsg).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const groupChatReadConstructor = ({ sessionId, remoteId, content }) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.GROUP_CHAT_READ,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
toId: remoteId,
|
||
sessionId: sessionId,
|
||
content: content,
|
||
seq: uuidv4()
|
||
})
|
||
const chatMsg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(chatMsg).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
export const statusReqConstructor = (accounts) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.STATUS_REQ,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
content: accounts
|
||
})
|
||
|
||
const msg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(msg).finish()
|
||
const data = encodePayload(payload)
|
||
return data
|
||
}
|
||
|
||
export const statusSyncConstructor = (status) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.STATUS_SYNC,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
content: `${status}` //content定义是String类型,这里需要转一下
|
||
})
|
||
|
||
const msg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(msg).finish()
|
||
const data = encodePayload(payload)
|
||
return data
|
||
}
|
||
|
||
export const atConstructor = ({ sessionId, remoteId, content, sequence }) => {
|
||
const header = Header.create({
|
||
magic: proto.magic,
|
||
version: proto.version,
|
||
msgType: MsgType.AT,
|
||
isExtension: false
|
||
})
|
||
|
||
const userData = useUserStore()
|
||
const body = Body.create({
|
||
fromId: userData.user.account,
|
||
fromClient: userData.clientId,
|
||
sessionId: sessionId,
|
||
groupId: remoteId,
|
||
content: content,
|
||
seq: sequence
|
||
})
|
||
const chatMsg = Msg.create({ header: header, body: body })
|
||
const payload = Msg.encode(chatMsg).finish()
|
||
const data = encodePayload(payload)
|
||
|
||
return data
|
||
}
|
||
|
||
/**
|
||
* 发送前对长度编码,配合服务端解决半包黏包问题
|
||
* @param {*} payload
|
||
* @returns
|
||
*/
|
||
const encodePayload = (payload) => {
|
||
let num = payload.length
|
||
let lenEncode = []
|
||
while (num > 0) {
|
||
let byte = num & 0x7f
|
||
num >>= 7
|
||
if (num > 0) {
|
||
byte |= 0x80
|
||
}
|
||
lenEncode.push(byte)
|
||
}
|
||
return Uint8Array.of(...lenEncode, ...payload)
|
||
}
|