代码拉取完成,页面将自动刷新
package remote
import (
"time"
"github.com/AsynkronIT/protoactor-go/actor"
"github.com/AsynkronIT/protoactor-go/log"
"golang.org/x/net/context"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type endpointReader struct {
suspended bool
}
func (s *endpointReader) Connect(ctx context.Context, req *ConnectRequest) (*ConnectResponse, error) {
if s.suspended {
return nil, status.Error(codes.Canceled, "Suspended")
}
return &ConnectResponse{DefaultSerializerId: DefaultSerializerID}, nil
}
func (s *endpointReader) Receive(stream Remoting_ReceiveServer) error {
targets := make([]*actor.PID, 100)
for {
if s.suspended {
time.Sleep(time.Millisecond * 500)
continue
}
batch, err := stream.Recv()
if err != nil {
plog.Debug("EndpointReader failed to read", log.Error(err))
return err
}
// only grow pid lookup if needed
if len(batch.TargetNames) > len(targets) {
targets = make([]*actor.PID, len(batch.TargetNames))
}
for i := 0; i < len(batch.TargetNames); i++ {
targets[i] = actor.NewLocalPID(batch.TargetNames[i])
}
for _, envelope := range batch.Envelopes {
pid := targets[envelope.Target]
message, err := Deserialize(envelope.MessageData, batch.TypeNames[envelope.TypeId], envelope.SerializerId)
if err != nil {
plog.Debug("EndpointReader failed to deserialize", log.Error(err))
return err
}
// if message is system message send it as sysmsg instead of usermsg
sender := envelope.Sender
switch msg := message.(type) {
case *actor.Terminated:
rt := &remoteTerminate{
Watchee: msg.Who,
Watcher: pid,
}
endpointManager.remoteTerminate(rt)
case actor.SystemMessage:
ref, _ := actor.ProcessRegistry.GetLocal(pid.Id)
ref.SendSystemMessage(pid, msg)
default:
var header map[string]string
if envelope.MessageHeader != nil {
header = envelope.MessageHeader.HeaderData
}
localEnvelope := &actor.MessageEnvelope{
Header: header,
Message: message,
Sender: sender,
}
rootContext.Send(pid, localEnvelope)
}
}
}
}
func (s *endpointReader) suspend(toSuspend bool) {
s.suspended = toSuspend
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。