代码拉取完成,页面将自动刷新
package remote
import (
"errors"
"time"
"gitee.com/lwj8507/light-protoactor-go/actor"
)
var (
nameLookup = make(map[string]actor.Props)
activatorPid *actor.PID
)
func spawnActivatorActor() {
activatorPid, _ = actor.SpawnNamed(actor.FromProducer(newActivatorActor()), "activator")
}
//Register a known actor props by name
func Register(kind string, props *actor.Props) {
nameLookup[kind] = *props
}
//GetKnownKinds returns a slice of known actor "kinds"
func GetKnownKinds() []string {
keys := make([]string, 0, len(nameLookup))
for k := range nameLookup {
keys = append(keys, k)
}
return keys
}
type activator struct {
}
func ActivatorForAddress(address string) *actor.PID {
pid := actor.NewPID(address, "activator")
return pid
}
func SpawnFuture(address, name, kind string, timeout time.Duration) *actor.Future {
activator := ActivatorForAddress(address)
f := actor.RequestFuture(activator, &ActorPidRequest{
Name: name,
Kind: kind,
}, timeout)
return f
}
func Spawn(address, kind string, timeout time.Duration) (*actor.PID, error) {
return SpawnNamed(address, "", kind, timeout)
}
func SpawnNamed(address, name, kind string, timeout time.Duration) (*actor.PID, error) {
activator := ActivatorForAddress(address)
res, err := actor.RequestFuture(activator, &ActorPidRequest{
Name: name,
Kind: kind,
}, timeout).Result()
if err != nil {
return nil, errors.New("remote: Remote activating timed out")
}
switch msg := res.(type) {
case *ActorPidResponse:
return msg.Pid, nil
default:
return nil, errors.New("remote: Unknown response when remote activating")
}
}
func newActivatorActor() actor.Producer {
return func() actor.Actor {
return &activator{}
}
}
func (*activator) Receive(context actor.Context) {
switch msg := context.Message().(type) {
case *actor.Started:
logger.Info("Started Activator")
case *actor.Stopping:
case *actor.Stopped:
logger.Info("Stopped Activator")
case *ActorPidRequest:
props := nameLookup[msg.Kind]
name := msg.Name
//unnamed actor, assign auto ID
if name == "" {
name = actor.ProcessRegistry.NextId()
}
pid, _ := actor.SpawnNamed(&props, "Remote$"+name)
response := &ActorPidResponse{
Pid: pid,
}
context.Respond(response)
default:
logger.Error("Activator got unknown message=[%#v]", msg)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。