Pavle Radojkovic / mbed-mqtt
Committer:
pavleradojkovic
Date:
Mon Jun 20 16:24:43 2022 +0000
Revision:
0:ba7e439238ab
Inital commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pavleradojkovic 0:ba7e439238ab 1 /**************************************************************************************
pavleradojkovic 0:ba7e439238ab 2 * Copyright (c) 2018, Tomoaki Yamaguchi
pavleradojkovic 0:ba7e439238ab 3 *
pavleradojkovic 0:ba7e439238ab 4 * All rights reserved. This program and the accompanying materials
pavleradojkovic 0:ba7e439238ab 5 * are made available under the terms of the Eclipse Public License v1.0
pavleradojkovic 0:ba7e439238ab 6 * and Eclipse Distribution License v1.0 which accompany this distribution.
pavleradojkovic 0:ba7e439238ab 7 *
pavleradojkovic 0:ba7e439238ab 8 * The Eclipse Public License is available at
pavleradojkovic 0:ba7e439238ab 9 * http://www.eclipse.org/legal/epl-v10.html
pavleradojkovic 0:ba7e439238ab 10 * and the Eclipse Distribution License is available at
pavleradojkovic 0:ba7e439238ab 11 * http://www.eclipse.org/org/documents/edl-v10.php.
pavleradojkovic 0:ba7e439238ab 12 *
pavleradojkovic 0:ba7e439238ab 13 * Contributors:
pavleradojkovic 0:ba7e439238ab 14 * Tomoaki Yamaguchi - initial API and implementation and/or initial documentation
pavleradojkovic 0:ba7e439238ab 15 **************************************************************************************/
pavleradojkovic 0:ba7e439238ab 16
pavleradojkovic 0:ba7e439238ab 17 #ifndef MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATETOPICTABLE_H_
pavleradojkovic 0:ba7e439238ab 18 #define MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATETOPICTABLE_H_
pavleradojkovic 0:ba7e439238ab 19
pavleradojkovic 0:ba7e439238ab 20 #include "MQTTSNGWDefines.h"
pavleradojkovic 0:ba7e439238ab 21 #include "MQTTSNGWProcess.h"
pavleradojkovic 0:ba7e439238ab 22 #include <stdint.h>
pavleradojkovic 0:ba7e439238ab 23 namespace MQTTSNGW
pavleradojkovic 0:ba7e439238ab 24 {
pavleradojkovic 0:ba7e439238ab 25
pavleradojkovic 0:ba7e439238ab 26 class Client;
pavleradojkovic 0:ba7e439238ab 27 class Topic;
pavleradojkovic 0:ba7e439238ab 28 class AggregateTopicElement;
pavleradojkovic 0:ba7e439238ab 29 class ClientTopicElement;
pavleradojkovic 0:ba7e439238ab 30 class Mutex;
pavleradojkovic 0:ba7e439238ab 31
pavleradojkovic 0:ba7e439238ab 32 /*=====================================
pavleradojkovic 0:ba7e439238ab 33 Class AggregateTopicTable
pavleradojkovic 0:ba7e439238ab 34 ======================================*/
pavleradojkovic 0:ba7e439238ab 35 class AggregateTopicTable
pavleradojkovic 0:ba7e439238ab 36 {
pavleradojkovic 0:ba7e439238ab 37 public:
pavleradojkovic 0:ba7e439238ab 38 AggregateTopicTable();
pavleradojkovic 0:ba7e439238ab 39 ~AggregateTopicTable();
pavleradojkovic 0:ba7e439238ab 40
pavleradojkovic 0:ba7e439238ab 41 AggregateTopicElement* add(Topic* topic, Client* client);
pavleradojkovic 0:ba7e439238ab 42 AggregateTopicElement* getClientList(Topic* client);
pavleradojkovic 0:ba7e439238ab 43 void remove(Topic* topic, Client* client);
pavleradojkovic 0:ba7e439238ab 44 void clear(void);
pavleradojkovic 0:ba7e439238ab 45 private:
pavleradojkovic 0:ba7e439238ab 46 AggregateTopicElement* _head {nullptr};
pavleradojkovic 0:ba7e439238ab 47 AggregateTopicElement* _tail {nullptr};
pavleradojkovic 0:ba7e439238ab 48 int _cnt {0};
pavleradojkovic 0:ba7e439238ab 49 int _maxSize {MAX_MESSAGEID_TABLE_SIZE};
pavleradojkovic 0:ba7e439238ab 50 };
pavleradojkovic 0:ba7e439238ab 51
pavleradojkovic 0:ba7e439238ab 52 /*=====================================
pavleradojkovic 0:ba7e439238ab 53 Class AggregateTopicElement
pavleradojkovic 0:ba7e439238ab 54 =====================================*/
pavleradojkovic 0:ba7e439238ab 55 class AggregateTopicElement
pavleradojkovic 0:ba7e439238ab 56 {
pavleradojkovic 0:ba7e439238ab 57 friend class AggregateTopicTable;
pavleradojkovic 0:ba7e439238ab 58 public:
pavleradojkovic 0:ba7e439238ab 59 AggregateTopicElement(void);
pavleradojkovic 0:ba7e439238ab 60 AggregateTopicElement(Topic* topic, Client* client);
pavleradojkovic 0:ba7e439238ab 61 ~AggregateTopicElement(void);
pavleradojkovic 0:ba7e439238ab 62
pavleradojkovic 0:ba7e439238ab 63 ClientTopicElement* add(Client* client);
pavleradojkovic 0:ba7e439238ab 64 ClientTopicElement* getFirstElement(void);
pavleradojkovic 0:ba7e439238ab 65 ClientTopicElement* getNextElement(ClientTopicElement* elm);
pavleradojkovic 0:ba7e439238ab 66 void erase(ClientTopicElement* elm);
pavleradojkovic 0:ba7e439238ab 67 ClientTopicElement* find(Client* client);
pavleradojkovic 0:ba7e439238ab 68
pavleradojkovic 0:ba7e439238ab 69 private:
pavleradojkovic 0:ba7e439238ab 70 Mutex _mutex;
pavleradojkovic 0:ba7e439238ab 71 Topic* _topic {nullptr};
pavleradojkovic 0:ba7e439238ab 72 ClientTopicElement* _head {nullptr};
pavleradojkovic 0:ba7e439238ab 73 ClientTopicElement* _tail {nullptr};
pavleradojkovic 0:ba7e439238ab 74 };
pavleradojkovic 0:ba7e439238ab 75
pavleradojkovic 0:ba7e439238ab 76 /*=====================================
pavleradojkovic 0:ba7e439238ab 77 Class ClientTopicElement
pavleradojkovic 0:ba7e439238ab 78 =====================================*/
pavleradojkovic 0:ba7e439238ab 79 class ClientTopicElement
pavleradojkovic 0:ba7e439238ab 80 {
pavleradojkovic 0:ba7e439238ab 81 friend class AggregateTopicTable;
pavleradojkovic 0:ba7e439238ab 82 friend class AggregateTopicElement;
pavleradojkovic 0:ba7e439238ab 83 public:
pavleradojkovic 0:ba7e439238ab 84 ClientTopicElement(Client* client);
pavleradojkovic 0:ba7e439238ab 85 ~ClientTopicElement(void);
pavleradojkovic 0:ba7e439238ab 86 Client* getClient(void);
pavleradojkovic 0:ba7e439238ab 87
pavleradojkovic 0:ba7e439238ab 88 private:
pavleradojkovic 0:ba7e439238ab 89 Client* _client {nullptr};
pavleradojkovic 0:ba7e439238ab 90 ClientTopicElement* _next {nullptr};
pavleradojkovic 0:ba7e439238ab 91 ClientTopicElement* _prev {nullptr};
pavleradojkovic 0:ba7e439238ab 92 };
pavleradojkovic 0:ba7e439238ab 93
pavleradojkovic 0:ba7e439238ab 94 }
pavleradojkovic 0:ba7e439238ab 95
pavleradojkovic 0:ba7e439238ab 96
pavleradojkovic 0:ba7e439238ab 97
pavleradojkovic 0:ba7e439238ab 98 #endif /* MQTTSNGATEWAY_SRC_MQTTSNGWAGGREGATETOPICTABLE_H_ */