31 #include <unordered_map> 35 typedef std::basic_string<unsigned char>
ustring;
49 : m_taskHandle(other.m_taskHandle)
50 , m_scheduler(other.m_scheduler)
52 , m_sync((bool)other.m_sync)
58 bool isSync()
const {
return m_sync; }
61 void scheduleTaskPeriodic(
const std::string& clientId,
const std::string& task,
const std::chrono::seconds& sec,
62 const std::chrono::system_clock::time_point& tp = std::chrono::system_clock::now())
75 m_scheduler->
removeTask(clientId, m_taskHandle);
81 std::atomic_bool m_sync{
false };
96 void updateConfiguration(
const rapidjson::Value& cfg);
98 void setDaemon(
IDaemon* daemon)
override;
99 virtual void setSerializer(
ISerializer* serializer)
override;
100 virtual void setMessaging(
IMessaging* messaging)
override;
105 void update(
const rapidjson::Value& cfg)
override;
106 void start()
override;
107 void stop()
override;
110 void handleMsgFromMessaging(
const ustring& msg);
111 void handleTaskFromScheduler(
const std::string& task);
114 struct BridgeStatusData {
122 static const int MANUFACTURER_LEN = 2;
125 static const int ADDRESS_LEN = 6;
128 struct PacketHeader {
129 uint8_t manufacturer[MANUFACTURER_LEN];
130 uint8_t address[ADDRESS_LEN];
133 std::map<uint8_t, BridgeStatusData> getActiveBridgesStatusMap();
134 std::list<uint8_t> getNewVisibleMetersIndexes(uint8_t bridgeAddress);
135 std::list<uint8_t> getNewInvisibleMetersIndexes(uint8_t bridgeAddress);
136 std::list<uint8_t> getNewDataMetersIndexes(uint8_t bridgeAddress);
138 void confirmVisibleMeters(uint8_t bridgeAddress, std::list<uint8_t> newVisibleMetersIndexes);
139 void confirmInvisibleMeters(uint8_t bridgeAddress, std::list<uint8_t> newInvisibleMetersIndexes);
141 void sendDataIntoAzure(PacketHeader packetHeader, uint8_t data[],
int dataLen);
142 void sleepProtocolBridge(uint8_t bridgeAddress);
143 void timeoutWMBProtocolBridge(uint8_t bridgeAddress);
145 void getAndProcessDataFromMeters(
const std::string& task);
150 uint16_t m_frcPeriod = 30;
153 uint16_t m_sleepPeriod = 10;
156 uint16_t m_wmPeriod = 60;
162 std::unordered_map<int, ProtocolBridgeSchd> m_watchedProtocolBridges;
virtual ~ScheduleDpaTask()
Definition: ProtocolBridgeClientService.h:56
long TaskHandle
Task handle is task identification.
Definition: IScheduler.h:32
const std::string & getName() const override
Get name of the instance.
Definition: ProtocolBridgeClientService.h:101
Definition: ProtocolBridgeClientService.h:38
virtual TaskHandle scheduleTaskPeriodic(const std::string &clientId, const std::string &task, const std::chrono::seconds &sec, const std::chrono::system_clock::time_point &tp=std::chrono::system_clock::now())=0
Schedule periodic task.
void setSync(bool val)
Definition: ProtocolBridgeClientService.h:59
ScheduleDpaTask< ProtocolBridgeJson > ProtocolBridgeSchd
Definition: ProtocolBridgeClientService.h:87
ISerializer interface.
Definition: ISerializer.h:31
static const TaskHandle TASK_HANDLE_INVALID
Invalid task handle.
Definition: IScheduler.h:35
void removeSchedule(const std::string &clientId)
Definition: ProtocolBridgeClientService.h:73
virtual void removeTask(const std::string &clientId, TaskHandle hndl)=0
Remove task for client.
IDaemon interface.
Definition: IDaemon.h:31
IScheduler interface.
Definition: IScheduler.h:28
IService interface.
Definition: IService.h:30
Definition: ProtocolBridgeClientService.h:89
bool isSync() const
Definition: ProtocolBridgeClientService.h:58
IMessaging interface.
Definition: IMessaging.h:29
bool isScheduled()
Definition: ProtocolBridgeClientService.h:68
ScheduleDpaTask(const T &dpt, IScheduler *schd)
Definition: ProtocolBridgeClientService.h:42
std::basic_string< unsigned char > ustring
Definition: ProtocolBridgeClientService.h:33
Definition: ProtocolBridge.h:152
ScheduleDpaTask(const ScheduleDpaTask &other)
Definition: ProtocolBridgeClientService.h:48
void scheduleTaskPeriodic(const std::string &clientId, const std::string &task, const std::chrono::seconds &sec, const std::chrono::system_clock::time_point &tp=std::chrono::system_clock::now())
Definition: ProtocolBridgeClientService.h:61
T & getDpa()
Definition: ProtocolBridgeClientService.h:79