1 Star 0 Fork 0

jack/protoactor-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
middlewarepropagation.go 2.23 KB
一键复制 编辑 原始数据 按行查看 历史
490689386@qq.com 提交于 2025-05-19 14:50 +08:00 . 初始化
package propagator
import (
"gitee.com/wujianhai/protoactor-go/actor"
)
type MiddlewarePropagator struct {
spawnMiddleware []actor.SpawnMiddleware
senderMiddleware []actor.SenderMiddleware
receiverMiddleware []actor.ReceiverMiddleware
contextDecorators []actor.ContextDecorator
}
func New() *MiddlewarePropagator {
return &MiddlewarePropagator{}
}
func (propagator *MiddlewarePropagator) WithItselfForwarded() *MiddlewarePropagator {
return propagator.WithSpawnMiddleware(propagator.SpawnMiddleware)
}
func (propagator *MiddlewarePropagator) WithSpawnMiddleware(middleware ...actor.SpawnMiddleware) *MiddlewarePropagator {
propagator.spawnMiddleware = append(propagator.spawnMiddleware, middleware...)
return propagator
}
func (propagator *MiddlewarePropagator) WithSenderMiddleware(middleware ...actor.SenderMiddleware) *MiddlewarePropagator {
propagator.senderMiddleware = append(propagator.senderMiddleware, middleware...)
return propagator
}
func (propagator *MiddlewarePropagator) WithReceiverMiddleware(middleware ...actor.ReceiverMiddleware) *MiddlewarePropagator {
propagator.receiverMiddleware = append(propagator.receiverMiddleware, middleware...)
return propagator
}
func (propagator *MiddlewarePropagator) WithContextDecorator(decorators ...actor.ContextDecorator) *MiddlewarePropagator {
propagator.contextDecorators = append(propagator.contextDecorators, decorators...)
return propagator
}
func (propagator *MiddlewarePropagator) SpawnMiddleware(next actor.SpawnFunc) actor.SpawnFunc {
return func(actorSystem *actor.ActorSystem, id string, props *actor.Props, parentContext actor.SpawnerContext) (pid *actor.PID, e error) {
if propagator.spawnMiddleware != nil {
props = props.Configure(actor.WithSpawnMiddleware(propagator.spawnMiddleware...))
}
if propagator.senderMiddleware != nil {
props = props.Configure(actor.WithSenderMiddleware(propagator.senderMiddleware...))
}
if propagator.receiverMiddleware != nil {
props = props.Configure(actor.WithReceiverMiddleware(propagator.receiverMiddleware...))
}
if propagator.contextDecorators != nil {
props = props.Configure(actor.WithContextDecorator(propagator.contextDecorators...))
}
pid, err := next(actorSystem, id, props, parentContext)
return pid, err
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wujianhai/protoactor-go.git
git@gitee.com:wujianhai/protoactor-go.git
wujianhai
protoactor-go
protoactor-go
5633fe2499dd

搜索帮助