private static void OnRead(this ProcessOuterSender self, long channelId, MemoryBuffer memoryBuffer)
{
Session session = self.GetChild<Session>(channelId);
if (session == null)
{
return;
}
...
switch (message)
{
case ILocationRequest:
case IRequest:
{
async ETTask Call()
{
IRequest request = (IRequest)message;
// 注意这里都不能抛异常,因为这里只是中转消息
IResponse response = await fiber.Root.GetComponent<ProcessInnerSender>().Call(actorId, request, false);
actorId.Process = fromProcess;
// 这里有BUG?
// 使用self.Send发送响应, 会新建立到目标服务的网络session。
// 应该是直接利用发送消息的客户端session完成reply,而不是使用self.Send函数来发送响应。
// 即:session.Send(actorId, response);
self.Send(actorId, response);
}
Call().Coroutine();
break;
}
default:
{
fiber.Root.GetComponent<ProcessInnerSender>().Send(actorId, (IMessage)message);
break;
}
}
}