Ai
1 Star 0 Fork 0

monobytes/gcore

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
client.go 1.69 KB
一键复制 编辑 原始数据 按行查看 历史
null 提交于 2025-01-22 18:29 +08:00 . first commit
package node
import (
"context"
"gitee.com/monobytes/gcore/gcluster"
"gitee.com/monobytes/gcore/internal/transporter/internal/client"
"gitee.com/monobytes/gcore/internal/transporter/internal/codes"
"gitee.com/monobytes/gcore/internal/transporter/internal/protocol"
"sync/atomic"
)
type Client struct {
seq uint64
cli *client.Client
}
func NewClient(cli *client.Client) *Client {
return &Client{
cli: cli,
}
}
// Trigger 触发事件
func (c *Client) Trigger(ctx context.Context, event gcluster.Event, cid, uid int64) error {
return c.cli.Send(ctx, protocol.EncodeTriggerReq(0, event, cid, uid))
}
// Deliver 投递消息
func (c *Client) Deliver(ctx context.Context, cid, uid int64, message []byte) error {
return c.cli.Send(ctx, protocol.EncodeDeliverReq(0, cid, uid, message), cid)
}
// GetState 获取状态
func (c *Client) GetState(ctx context.Context) (gcluster.State, error) {
seq := c.doGenSequence()
buf := protocol.EncodeGetStateReq(seq)
res, err := c.cli.Call(ctx, seq, buf)
if err != nil {
return 0, err
}
code, state, err := protocol.DecodeGetStateRes(res)
if err != nil {
return 0, err
}
return state, codes.CodeToError(code)
}
// SetState 设置状态
func (c *Client) SetState(ctx context.Context, state gcluster.State) error {
seq := c.doGenSequence()
buf := protocol.EncodeSetStateReq(seq, state)
res, err := c.cli.Call(ctx, seq, buf)
if err != nil {
return err
}
code, err := protocol.DecodeSetStateRes(res)
if err != nil {
return err
}
return codes.CodeToError(code)
}
// 生成序列号,规避生成序列号为0的编号
func (c *Client) doGenSequence() (seq uint64) {
for {
if seq = atomic.AddUint64(&c.seq, 1); seq != 0 {
return
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/monobytes/gcore.git
git@gitee.com:monobytes/gcore.git
monobytes
gcore
gcore
v0.0.17

搜索帮助