interconnect_proxy_wrapper.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "interconnect_proxy_wrapper.h"
  2. #include "interconnect_tcp_proxy.h"
  3. #include <library/cpp/actors/interconnect/mock/ic_mock.h>
  4. namespace NActors {
  5. class TInterconnectProxyWrapper : public IActor {
  6. TIntrusivePtr<TInterconnectProxyCommon> Common;
  7. const ui32 NodeId;
  8. TInterconnectMock *Mock;
  9. IActor *Proxy = nullptr;
  10. public:
  11. TInterconnectProxyWrapper(TIntrusivePtr<TInterconnectProxyCommon> common, ui32 nodeId, TInterconnectMock *mock)
  12. : IActor(static_cast<TReceiveFunc>(&TInterconnectProxyWrapper::StateFunc), INTERCONNECT_PROXY_WRAPPER)
  13. , Common(std::move(common))
  14. , NodeId(nodeId)
  15. , Mock(mock)
  16. {}
  17. STFUNC(StateFunc) {
  18. if (ev->GetTypeRewrite() == TEvents::TSystem::Poison && !Proxy) {
  19. PassAway();
  20. } else {
  21. if (!Proxy) {
  22. IActor *actor = Mock
  23. ? Mock->CreateProxyMock(TActivationContext::ActorSystem()->NodeId, NodeId, Common)
  24. : new TInterconnectProxyTCP(NodeId, Common, &Proxy);
  25. RegisterWithSameMailbox(actor);
  26. if (Mock) {
  27. Proxy = actor;
  28. }
  29. Y_VERIFY(Proxy);
  30. }
  31. InvokeOtherActor(*Proxy, &IActor::Receive, ev, ctx);
  32. }
  33. }
  34. };
  35. TProxyWrapperFactory CreateProxyWrapperFactory(TIntrusivePtr<TInterconnectProxyCommon> common, ui32 poolId,
  36. TInterconnectMock *mock) {
  37. return [=](TActorSystem *as, ui32 nodeId) -> TActorId {
  38. return as->Register(new TInterconnectProxyWrapper(common, nodeId, mock), TMailboxType::HTSwap, poolId);
  39. };
  40. }
  41. } // NActors