/************************************************************************************** * Copyright (c) 2018, Tomoaki Yamaguchi * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Tomoaki Yamaguchi - initial API and implementation and/or initial documentation **************************************************************************************/ #ifndef MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATER_H_ #define MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATER_H_ #include "MQTTSNGWAdapter.h" #include "MQTTSNGWMessageIdTable.h" #include "MQTTSNGWAggregateTopicTable.h" namespace MQTTSNGW { class Gateway; class Adapter; class Client; class SensorNetAddress; class MessageIdTable; class AggregateTopicTable; class Topics; /*===================================== Class Aggregater =====================================*/ class Aggregater: public Adapter { friend class MessageIdTable; public: Aggregater(Gateway* gw); ~Aggregater(void); void initialize(char* gwName); const char* getClientId(SensorNetAddress* addr); Client* getClient(SensorNetAddress* addr); Client* convertClient(uint16_t msgId, uint16_t* clientMsgId); uint16_t addMessageIdTable(Client* client, uint16_t msgId); uint16_t getMsgId(Client* client, uint16_t clientMsgId); ClientTopicElement* getClientElement(Topic* topic); ClientTopicElement* getNextClientElement(ClientTopicElement* clientElement); Client* getClient(ClientTopicElement* clientElement); AggregateTopicElement* findTopic(Topic* topic); AggregateTopicElement* addAggregateTopic(Topic* topic, Client* client); void removeAggregateTopic(Topic* topic, Client* client); void removeAggregateAllTopic(Client* client); bool isActive(void); void printAggregateTopicTable(void); bool testMessageIdTable(void); private: uint16_t msgId(void); Gateway* _gateway { nullptr }; MessageIdTable _msgIdTable; AggregateTopicTable _topicTable; bool _isActive { false }; bool _isSecure { false }; }; } #endif /* MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATER_H_ */