123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #pragma once
- #include "defs.h"
- #include <util/generic/hash.h>
- #include <util/generic/map.h>
- #include <util/generic/set.h>
- #include <util/generic/string.h>
- #include <util/network/interface.h>
- #include <util/system/mutex.h>
- namespace NBus {
-
-
-
-
-
- class TBusLocator: public TAtomicRefCount<TBusLocator>, public TNonCopyable {
- private:
- typedef ui64 TServiceId;
- typedef TSet<TString> TServiceIdSet;
- TServiceIdSet ServiceIdSet;
- TServiceId GetServiceId(const char* name);
- typedef TMap<TNetAddr, TString> THostAddrMap;
- THostAddrMap HostAddrMap;
- TNetworkInterfaceList MyInterfaces;
- struct TItem {
- TServiceId ServiceId;
- TBusKey Start;
- TBusKey End;
- TNetAddr Addr;
- bool operator<(const TItem& y) const;
- bool operator==(const TItem& y) const;
- TItem(TServiceId serviceId, TBusKey start, TBusKey end, const TNetAddr& addr);
- };
- typedef TMultiSet<TItem> TItems;
- TItems Items;
- TMutex Lock;
- int RegisterBreak(TServiceId serviceId, const TBusKey start, const TNetAddr& addr);
- int UnregisterBreak(TServiceId serviceId, const TNetAddr& addr);
- void NormalizeBreaks(TServiceId serviceId);
- private:
- int Register(TBusService service, TBusKey start, TBusKey end, const TNetAddr& addr);
- public:
-
- TBusLocator();
-
- bool IsLocal(const TNetAddr& addr);
-
- int Locate(TBusService service, TBusKey key, TNetAddr* addr);
-
- int LocateAll(TBusService service, TBusKey key, TVector<TNetAddr>& addrs);
-
- int LocateHost(TBusService service, TBusKey key, TString* host, int* port, bool* isLocal = nullptr);
-
- int LocateKeys(TBusService service, TBusKeyVec& keys, bool onlyLocal = false);
-
- int GetLocalPort(TBusService service);
-
- int GetLocalAddresses(TBusService service, TVector<TNetAddr>& addrs);
-
- int Register(TBusService service, TBusKey start, TBusKey end, const TNetworkAddress& addr, EIpVersion requireVersion = EIP_VERSION_4, EIpVersion preferVersion = EIP_VERSION_ANY);
-
- int Register(TBusService service, const char* host, int port, TBusKey start = YBUS_KEYMIN, TBusKey end = YBUS_KEYMAX, EIpVersion requireVersion = EIP_VERSION_4, EIpVersion preferVersion = EIP_VERSION_ANY);
-
- int Unregister(TBusService service, TBusKey start, TBusKey end);
- int RegisterBreak(TBusService service, const TVector<TBusKey>& starts, const TNetAddr& addr);
- int UnregisterBreak(TBusService service, const TNetAddr& addr);
- };
- }
|