#pragma once #include #include #include #include #include #include using namespace NActors; struct TExampleStorageConfig : public TThrRefBase { TVector Replicas; }; struct TEvExample { enum EEv { EvReplicaLookup = EventSpaceBegin(TEvents::ES_USERSPACE + 1), EvReplicaPublish, EvReplicaInfo = EventSpaceBegin(TEvents::ES_USERSPACE + 2), EvReplicaPublishAck, EvInfo = EventSpaceBegin(TEvents::ES_USERSPACE + 3), }; struct TEvReplicaLookup : public TEventPB { TEvReplicaLookup() {} TEvReplicaLookup(const TString &key) { Record.SetKey(key); } }; struct TEvReplicaPublish : public TEventPB { TEvReplicaPublish() {} TEvReplicaPublish(const TString &key, const TString &payload) { Record.SetKey(key); Record.SetPayload(payload); } }; struct TEvReplicaInfo : public TEventPB { TEvReplicaInfo() {} TEvReplicaInfo(const TString &key) { Record.SetKey(key); } }; struct TEvReplicaPublishAck : public TEventPB { TEvReplicaPublishAck() {} TEvReplicaPublishAck(const TString &key) { Record.SetKey(key); } }; struct TEvInfo : public TEventLocal { const TString Key; const TVector Payloads; TEvInfo(const TString &key, TVector &&payloads) : Key(key) , Payloads(payloads) {} }; }; IActor* CreateReplica(); IActor* CreatePublishActor(TExampleStorageConfig *config, const TString &key, const TString &what); IActor* CreateLookupActor(TExampleStorageConfig *config, const TString &key, TActorId replyTo); IActor* CreateEndpointActor(TExampleStorageConfig *config, const TString &publishKey, ui16 httpPort); TActorId MakeReplicaId(ui32 nodeid);