resume

package
v0.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 6, 2026 License: Apache-2.0 Imports: 2 Imported by: 0

Documentation

Overview

Package resume 提供断线重连的在场状态还原:客户端用 refresh token 重连, 服务端换出 userID,查 presence 看用户还在哪些流,返回流列表让客户端自动重连。

session resume:断线后 presence 不立即 清除(给一个宽限期),重连时把该会话仍持有的流回给客户端,客户端按列表重新 join, 实现"掉线不掉状态"的体验。

它把 pkg/token(验证 refresh)与 pkg/presence(查在场流)织成完整登录态:

token.VerifyRefresh → userID/tokenID → presence.ListBySession → []Stream

零值不可用,用 New 构造。并发安全(只读组合两个并发安全组件)。

Index

Constants

This section is empty.

Variables

View Source
var ErrExpired = token.ErrExpired

ErrExpired refresh token 已过期。

View Source
var ErrInvalidToken = token.ErrInvalidToken

ErrInvalidToken refresh token 无效。

View Source
var ErrKicked = token.ErrKicked

ErrKicked 用户已被全局踢出。

View Source
var ErrNotConfigured = errNotConfigured{}

ErrNotConfigured token 管理器或 tracker 未配置。

View Source
var ErrRevoked = token.ErrRevoked

ErrRevoked refresh token 已被注销。

Functions

This section is empty.

Types

type Option

type Option func(*config)

Option 配置 Resolver。

func WithTokenManager

func WithTokenManager(m *token.Manager) Option

WithTokenManager 设置 token 管理器(必填,用于验证 refresh token)。

func WithTracker

func WithTracker(t *presence.Tracker) Option

WithTracker 设置在场追踪器(必填,用于查询用户的流)。

type PresenceInfo

type PresenceInfo struct {
	UserID  string
	TokenID string
	Streams []Stream
}

PresenceInfo 一个会话的在场快照:在哪些流 + 对应 userID。

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

Resolver 把 refresh token 解析为在场快照。

func New

func New(opts ...Option) *Resolver

New 创建 Resolver。tm 与 tracker 均必填,缺一则 Resolve 返回错误。

func (*Resolver) MarkOnline

func (r *Resolver) MarkOnline(sessionID, userID, username string, streams []Stream, hidden bool)

MarkOnline 在重连后把新会话重新登记到 presence(便于后续 ListBySession 命中)。 调用方应在重连握手成功后、对每个返回的 Stream 调 Track,或直接用本方法批量重登。 userID/username 从 token claims 取(sessionID 走不到 token 时留空)。

func (*Resolver) Resolve

func (r *Resolver) Resolve(refreshToken string) (PresenceInfo, error)

Resolve 用 refresh token 还原在场快照。 流程:VerifyRefresh 换 claims → 用 sessionID(=tokenID)查 presence.ListBySession → 投影成 Stream 列表。

sessionID 的约定:业务在 Issue 时把 tokenID 作为 presence.Track 的 sessionID (或建立 sessionID↔tokenID 映射),本包按此约定查询。 若业务用别的 sessionID 方案,可用 ResolveBySessionID 直接传 sessionID。

func (*Resolver) ResolveBySessionID

func (r *Resolver) ResolveBySessionID(sessionID string) (PresenceInfo, error)

ResolveBySessionID 直接按 sessionID 还原在场快照(不走 token 验证)。 适用于业务自管 sessionID、只需查在场流的场景。

type Stream

type Stream struct {
	Mode    uint8
	Subject string
	Label   string
}

Stream 流的精简视图(只含客户端重连需要的字段)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL