Files
NixMsg/sdk/go/types.go
T

232 lines
5.1 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 nixmsg
import "time"
// ConnectionState 连接状态(onConnection)。
type ConnectionState string
const (
StateConnecting ConnectionState = "connecting"
StateOnline ConnectionState = "online"
StateReconnecting ConnectionState = "reconnecting"
StateOffline ConnectionState = "offline"
StateKicked ConnectionState = "kicked"
StateAuthFailed ConnectionState = "auth_failed"
)
// Credential 登录凭据:密码或会话令牌二选一。
type Credential struct {
Password string
SessionToken string
}
// Options 连接选项。
type Options struct {
// ManualAck 为 true 时手动确认模式。
ManualAck bool
// AllowTCP 显式允许裸 TCP(mqtt:// / mqtts://)。默认只用 WebSocket。
AllowTCP bool
// ConnectTimeout 连接超时,默认 30s。
ConnectTimeout time.Duration
// ClientLabel hello.client,默认 go-sdk/0.1。
ClientLabel string
// MaxReceiveBytes hello.max_receive_bytes;0 表示省略(不限)。
MaxReceiveBytes int
// SendQueueSize 发送队列上限,默认 1000。
SendQueueSize int
// MaxInflight 在途上限,默认 100。
MaxInflight int
// DedupCapacity from+id 去重容量,默认 10000。
DedupCapacity int
// HTTPClient 注册用;nil 用默认。
// 测试可注入 transport。
transport transport
}
func (o *Options) withDefaults() Options {
out := *o
if out.ConnectTimeout <= 0 {
out.ConnectTimeout = 30 * time.Second
}
if out.ClientLabel == "" {
out.ClientLabel = "go-sdk/0.1"
}
if out.SendQueueSize <= 0 {
out.SendQueueSize = 1000
}
if out.MaxInflight <= 0 {
out.MaxInflight = 100
}
if out.DedupCapacity <= 0 {
out.DedupCapacity = 10000
}
return out
}
// Target 发送目标。
type Target struct {
Kind string `json:"kind"`
ID string `json:"id"`
}
// Body 消息正文。
type Body struct {
Enc string `json:"enc"`
ContentType string `json:"content_type,omitempty"`
Data string `json:"data"`
}
// SendOptions 发送选项。
type SendOptions struct {
SendAt *time.Time
Delay *time.Duration
Keep bool
TTL *int64
Receipt *bool
TalkPassword string
ContentType string
Meta map[string]any
ID string // 可选;空则生成 UUIDv7
}
// SendResult 发送结果。
type SendResult struct {
ID string
SendAtMs int64
State string
}
// Message 下行消息(交给应用)。
type Message struct {
ID string
From string
To Target
Body Body
Meta map[string]any
SendAtMs int64
}
// RecallResult 撤回结果。
type RecallResult struct {
Result string
Recalled int
Accepted int
Other int
}
// Receipt 回执。
type Receipt struct {
ReceiptID string
ID string
EndpointID string
State string
Reason string
AtMs int64
}
// RevokedEvent 撤回/作废事件。
type RevokedEvent struct {
ID string
From string
Reason string
}
// PresenceItem 在线查询项。
type PresenceItem struct {
ID string `json:"id"`
Online bool `json:"online"`
SinceMs int64 `json:"since_ms"`
}
// DirectoryItem 目录项。
type DirectoryItem struct {
ID string `json:"id"`
Name string `json:"name"`
Online bool `json:"online"`
OnlineSinceMs int64 `json:"online_since_ms"`
OfflineSinceMs int64 `json:"offline_since_ms"`
TalkPasswordSet bool `json:"talk_password_set"`
}
// PresenceEvent 上下线通知。
type PresenceEvent struct {
ID string
Online bool
AtMs int64
}
// GroupEvent 群事件。
type GroupEvent struct {
GroupID string
Event string
EndpointID string
AtMs int64
}
// SelfInfo 自己的资料。
type SelfInfo struct {
ID string `json:"id"`
Name string `json:"name"`
DefaultDelayMs int64 `json:"default_delay_ms"`
TalkPasswordSet bool `json:"talk_password_set"`
}
// GroupInfo 群摘要。
type GroupInfo struct {
ID string `json:"id"`
Name string `json:"name"`
OwnerID string `json:"owner_id"`
MemberCount int `json:"member_count"`
}
// GroupMember 群成员。
type GroupMember struct {
ID string `json:"id"`
Name string `json:"name"`
Online bool `json:"online"`
}
// GroupMemberIn 建群/加群成员。
type GroupMemberIn struct {
ID string
TalkPassword string
}
// MemberFailure 部分成员失败。
type MemberFailure struct {
ID string `json:"id"`
Code string `json:"code"`
}
// RegisterOptions 注册选项。
type RegisterOptions struct {
ID string
LoginPassword string
Name string
TalkPassword string
}
// RegisterResult 注册结果。
type RegisterResult struct {
ID string
LoginPassword string // 仅请求未带密码时返回
}
// HandshakeLimits 握手参数。
type HandshakeLimits struct {
ServerTimeMs int64
ServerVersion string
MaxBodyBytes int
MaxMetaBytes int
MaxFrameBytes int
MaxTTLSeconds int64
MaxScheduleSeconds int64
AckTimeoutSeconds int64
}
// ConnectionEvent 连接状态事件。
type ConnectionEvent struct {
State ConnectionState
Reason string // auth_failed / kicked 时的原因
}