public static async ETTask <IActorResponse> Call( this ActorMessageSenderComponent self, long actorId, IActorRequest request, bool needException = true ) { request.RpcId = self.GetRpcId(); if (actorId == 0) { throw new Exception($"actor id is 0: {request}"); } (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(request); return(await self.Call(actorId, request.RpcId, stream, needException)); }
public static async ETTask <IActorResponse> Call(this ActorLocationSenderComponent self, long entityId, IActorRequest iActorRequest) { ActorLocationSender actorLocationSender = self.GetOrCreate(entityId); // 先序列化好 int rpcId = ActorMessageSenderComponent.Instance.GetRpcId(); iActorRequest.RpcId = rpcId; (ushort _, MemoryStream stream) = MessageSerializeHelper.MessageToStream(0, iActorRequest); long actorLocationSenderInstanceId = actorLocationSender.InstanceId; using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.ActorLocationSender, entityId)) { if (actorLocationSender.InstanceId != actorLocationSenderInstanceId) { throw new RpcException(ErrorCore.ERR_ActorTimeout, $"{stream.ToActorMessage()}"); } // 队列中没处理的消息返回跟上个消息一样的报错 if (actorLocationSender.Error == ErrorCore.ERR_NotFoundActor) { return(ActorHelper.CreateResponse(iActorRequest, actorLocationSender.Error)); } try { return(await self.CallInner(actorLocationSender, rpcId, stream)); } catch (RpcException) { self.Remove(actorLocationSender.Id); throw; } catch (Exception e) { self.Remove(actorLocationSender.Id); throw new Exception($"{stream.ToActorMessage()}", e); } } }
public void Send(IMessage message) { switch (this.AService.ServiceType) { case ServiceType.Inner: { (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(0, message); OpcodeHelper.LogMsg(this.DomainZone(), opcode, message); this.Send(0, stream); break; } case ServiceType.Outer: { (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(message); OpcodeHelper.LogMsg(this.DomainZone(), opcode, message); this.Send(0, stream); break; } } }
public void Send(long actorId, IMessage message) { (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(actorId, message); OpcodeHelper.LogMsg(this.DomainZone(), opcode, message); this.Send(actorId, stream); }
public static void Send(this Session self, long actorId, IMessage message) { (ushort opcode, MemoryStream stream) = MessageSerializeHelper.MessageToStream(message); OpcodeHelper.LogMsg(self.DomainZone(), opcode, message); self.Send(actorId, stream); }