ActorProxy.cs 885 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System.Threading.Tasks;
  2. namespace Model
  3. {
  4. public sealed class ActorProxy : Entity
  5. {
  6. public string Address;
  7. public ActorProxy(long id): base(id)
  8. {
  9. }
  10. public void Send<Message>(Message message) where Message : AActorMessage
  11. {
  12. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(this.Address);
  13. session.Send(message);
  14. }
  15. public async Task<Response> Call<Request, Response>(Request request) where Request : AActorRequest where Response: AActorResponse
  16. {
  17. this.Address = await this.Parent.GetComponent<LocationProxyComponent>().Get(this.Id);
  18. Session session = Game.Scene.GetComponent<NetInnerComponent>().Get(this.Address);
  19. Response response = await session.Call<Request, Response>(request);
  20. return response;
  21. }
  22. public override void Dispose()
  23. {
  24. if (this.Id == 0)
  25. {
  26. return;
  27. }
  28. base.Dispose();
  29. }
  30. }
  31. }