Documentation
¶
Overview ¶
Package versus 提供"限时多方对抗计分"原语:N 个阵营在一段倒计时内实时累计分, 到点定胜负。直播 PK、团战、答题赛、拉票等"双方/多方限时比拼"场景的通用抽象。
这是一个组合型原语,复用 beauty 已有的基础件:
- pkg/fsm:对局状态机(pending→running→ended),非法操作(如结束后再加分)被拒;
- pkg/stream:分数变化 / 开始 / 结束事件 fan-out 给订阅者(推给客户端渲染);
- 内建单次倒计时(time.AfterFunc):到点自动结算。单对局自带定时器比共享 delayqueue 更自洽(无需外部生命周期);批量对局可在上层用 delayqueue 统管。
语义:
- New 定义阵营与时长,初始 pending;Start 进入 running 并启动倒计时;
- running 态 Add(side, delta) 累加分并广播 ScoreChanged;pending/ended 态 Add 报错;
- 倒计时到点(或手动 Finish)进入 ended:计算领先方 / 平局,触发 OnEnd 回调 + 广播 Ended 事件。ended 是终态,幂等(重复 Finish 无副作用)。
并发安全。零值不可用,用 New 构造。对局结束或不再使用时调用 Close 释放资源。
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrNotRunning = errors.New("versus: match not running")
ErrNotRunning 对局不在进行中(pending 未开始 / ended 已结束),不能加分。
View Source
var ErrUnknownSide = errors.New("versus: unknown side")
ErrUnknownSide 传入的阵营不在 New 声明的阵营列表中。
Functions ¶
This section is empty.
Types ¶
type Event ¶
type Event struct {
Type EventType
// Side 仅 EventScoreChanged 有意义:发生变化的阵营。
Side string
// Delta 仅 EventScoreChanged 有意义:本次变化量。
Delta int64
// Snapshot 事件发生后的对局快照。
Snapshot Snapshot
}
Event 广播给订阅者的对局事件。
type Match ¶
type Match struct {
// contains filtered or unexported fields
}
Match 一场限时多方对抗。零值不可用,用 New 构造。并发安全。
type Option ¶
type Option func(*config)
Option 配置 Match。
func WithDuration ¶
WithDuration 设置对局时长(Start 后倒计时,默认 5 分钟)。
Click to show internal directories.
Click to hide internal directories.