-
Notifications
You must be signed in to change notification settings - Fork 1
/
forward.go
58 lines (50 loc) · 1.81 KB
/
forward.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package processor
import (
"context"
"git.golaxy.org/core/service"
"git.golaxy.org/core/util/generic"
"git.golaxy.org/core/util/types"
"git.golaxy.org/framework/net/gap"
"git.golaxy.org/framework/net/gap/codec"
"git.golaxy.org/framework/plugins/dentq"
"git.golaxy.org/framework/plugins/dserv"
"git.golaxy.org/framework/plugins/log"
"git.golaxy.org/framework/plugins/rpc/callpath"
)
// PermissionValidator 权限验证器
type PermissionValidator = generic.DelegateFunc2[string, callpath.CallPath, bool]
// NewForwardProcessor RPC转发处理器,用于S<->G的通信
func NewForwardProcessor(transitService string, mc gap.IMsgCreator, permValidator PermissionValidator) any {
return &_ForwardProcessor{
encoder: codec.MakeEncoder(),
decoder: codec.MakeDecoder(mc),
transitService: transitService,
permValidator: permValidator,
}
}
// _ForwardProcessor RPC转发处理器,用于S<->G的通信
type _ForwardProcessor struct {
servCtx service.Context
dist dserv.IDistService
dentq dentq.IDistEntityQuerier
encoder codec.Encoder
decoder codec.Decoder
transitService string
transitBroadcastAddr string
permValidator PermissionValidator
watcher dserv.IWatcher
}
// Init 初始化
func (p *_ForwardProcessor) Init(ctx service.Context) {
p.servCtx = ctx
p.dist = dserv.Using(ctx)
p.dentq = dentq.Using(ctx)
p.transitBroadcastAddr = p.dist.MakeBroadcastAddr(p.transitService)
p.watcher = p.dist.WatchMsg(context.Background(), generic.MakeDelegateFunc2(p.handleMsg))
log.Debugf(p.servCtx, "rpc processor %q started", types.FullName(*p))
}
// Shut 结束
func (p *_ForwardProcessor) Shut(ctx service.Context) {
<-p.watcher.Terminate()
log.Debugf(p.servCtx, "rpc processor %q stopped", types.FullName(*p))
}