service/library/melody/envelope.go

97 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package melody
import (
"encoding/json"
"fmt"
)
//type CMsg struct {
// T int `json:"t"`
// Msg []byte `json:"msg"`
// filter filterFunc
//}
// 长连接消息结构
type CMsg struct {
Id string `json:"id"`
T int `json:"t"`
Ack int8 `json:"ack,omitempty"`
ChannelId string `json:"cid,omitempty"`
// data字段为上下游业务方的协议字段对于liverpool是透明的
Msg json.RawMessage `json:"msg,omitempty"`
filter filterFunc
}
const (
// 长连接初始化消息
CMsgTypeInit int = 1
// 长连接初始化消息响应
CMsgTypeInitResp int = 2
// 业务消息
CMsgTypeBiz int = 3
// ack消息
CMsgTypeAck int = 101
// echo消息用于测试
CMsgTypeEcho int = 102
)
func (m *CMsg) String() string {
return fmt.Sprintf("id: %s, t: %d, ack: %d, cid: %s", m.Id, m.T, m.Ack, m.ChannelId)
}
// ChanMsg是liverpool <-> channel之间的消息协议
type ChanMsg struct {
Id string `json:"id"`
// 消息类型liverpool支持的类型见上
// liverpool -> channel的消息只有ChanMsgTypeClientQuit会有值空值表示业务消息
// channel -> liverpool消息类型见上
Type int `json:"t,omitempty"`
// liverpool -> channel, 标明消息是从哪个session发送的
// channel -> liverpool, 消息的目标session以下消息类型需要:
// ChanMsgTypeSession: 必须
// ChanMsgTypeRegChannel: SessionId和Mid必须有一个有效值, SessionId有效值优先
// ChanMsgTypeUnregRoom: SessionId和Mid必须有一个有效值, SessionId有效值优先
// ChanMsgTypeUnregChannel: SessionId和Mid必须有一个有效值, SessionId有效值优先
SessionId string `json:"sid,omitempty"`
// liverpool -> channel: 触发消息的用户id
// channel -> liverpool: 业务方操作的用户id比如
Mid int64 `json:"mid,omitempty"`
// 消息的目标channel
// channelid不用在队列消息数据里面体现因为消息都是从固定的channel(topic)读取消息, 这个字段只是为了往下游client发送消息带的字段
ChannelId string `json:"cid,omitempty"`
// 消息的目前roomid, 如果没有这个字段会给channel下面所有的长连接发送消息
RoomId string `json:"rid,omitempty"`
// ChanMsgTypeRoomUsers 消息类型的用户id列表
Mids []int64 `json:"mids,omitempty"`
// 上游channel发送的消息需要liverpool保证的qos现阶段不做这块只做qos=0
Qos int8 `json:"qos,omitempty"`
// 上下游业务之间的定义的消息数据结构
Data json.RawMessage `json:"d,omitempty"`
// extension字段
MqSuffix string `json:"ms,omitempty"`
T int64 `json:"ts,omitempty"`
// 广播消息的发送比例,[0-100] 0 100表示全部发送n(0<n<100)表示n%的发送比例
BroadcastRate int8 `json:"broadcast_rate,omitempty"`
ExcludeMids []int64 `json:"exclude_mids,omitempty"`
IncludeMids []int64 `json:"include_mids,omitempty"`
// liverpool -> channel会有这个字段长连接客户端ip
IP string `json:"ip,omitempty"`
}
type InitMsgData struct {
Sid string `json:"sid"`
PingInterval int `json:"ping_interval"`
}
type BizMsg struct {
Type string `json:"t"` // 消息类型
Data any `json:"d"` // 消息内容
}