mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-14 16:06:51 +01:00
Update: Add Aggregate Gateway functions. #127
Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
161
MQTTSNGateway/src/MQTTSNGWAggregateTopicTable.cpp
Normal file
161
MQTTSNGateway/src/MQTTSNGWAggregateTopicTable.cpp
Normal file
@@ -0,0 +1,161 @@
|
||||
/**************************************************************************************
|
||||
* 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
|
||||
**************************************************************************************/
|
||||
#include "MQTTSNGWAggregateTopicTable.h"
|
||||
#include "MQTTSNGWClient.h"
|
||||
|
||||
/*=====================================
|
||||
Class ClientTopicElement
|
||||
=====================================*/
|
||||
ClientTopicElement::ClientTopicElement(Client* client)
|
||||
{
|
||||
_client = client;
|
||||
}
|
||||
|
||||
ClientTopicElement::~ClientTopicElement()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Client* ClientTopicElement::getClient(void)
|
||||
{
|
||||
return _client;
|
||||
}
|
||||
|
||||
/*=====================================
|
||||
Class AggregateTopicElement
|
||||
=====================================*/
|
||||
AggregateTopicElement::AggregateTopicElement(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AggregateTopicElement::AggregateTopicElement(Topic* topic, Client* client)
|
||||
{
|
||||
ClientTopicElement* elm = new ClientTopicElement(client);
|
||||
if ( elm != nullptr )
|
||||
{
|
||||
_head = elm;
|
||||
_tail = elm;
|
||||
}
|
||||
}
|
||||
|
||||
AggregateTopicElement::~AggregateTopicElement(void)
|
||||
{
|
||||
_mutex.lock();
|
||||
if ( _head != nullptr )
|
||||
{
|
||||
ClientTopicElement* p = _tail;
|
||||
while ( p )
|
||||
{
|
||||
ClientTopicElement* pPrev = p;
|
||||
delete p;
|
||||
p = pPrev->_prev;
|
||||
}
|
||||
_head = _tail = nullptr;
|
||||
}
|
||||
_mutex.unlock();
|
||||
}
|
||||
|
||||
ClientTopicElement* AggregateTopicElement::add(Client* client)
|
||||
{
|
||||
ClientTopicElement* elm = new ClientTopicElement(client);
|
||||
if ( elm == nullptr )
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
_mutex.lock();
|
||||
if ( _head == nullptr )
|
||||
{
|
||||
_head = elm;
|
||||
_tail = elm;
|
||||
}
|
||||
else
|
||||
{
|
||||
ClientTopicElement* p = find(client);
|
||||
if ( p == nullptr )
|
||||
{
|
||||
p = _tail;
|
||||
_tail = elm;
|
||||
elm->_prev = p;
|
||||
p->_next = elm;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete elm;
|
||||
elm = nullptr;
|
||||
}
|
||||
}
|
||||
_mutex.unlock();
|
||||
return elm;
|
||||
}
|
||||
|
||||
ClientTopicElement* AggregateTopicElement::find(Client* client)
|
||||
{
|
||||
ClientTopicElement* p = _head;
|
||||
while ( p )
|
||||
{
|
||||
if ( p->_client == client)
|
||||
{
|
||||
break;
|
||||
}
|
||||
p = p->_next;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
ClientTopicElement* AggregateTopicElement::getFirstElement(void)
|
||||
{
|
||||
return _head;
|
||||
}
|
||||
|
||||
ClientTopicElement* AggregateTopicElement::getNextElement(ClientTopicElement* elm)
|
||||
{
|
||||
return elm->_next;
|
||||
}
|
||||
|
||||
|
||||
/*=====================================
|
||||
Class AggregateTopicTable
|
||||
======================================*/
|
||||
|
||||
AggregateTopicTable::AggregateTopicTable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AggregateTopicTable::~AggregateTopicTable()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AggregateTopicElement* AggregateTopicTable::add(Topic* topic, Client* client)
|
||||
{
|
||||
//ToDo: AggregateGW
|
||||
return 0;
|
||||
}
|
||||
|
||||
void AggregateTopicTable::remove(Topic* topic, Client* client)
|
||||
{
|
||||
//ToDo: AggregateGW
|
||||
}
|
||||
|
||||
AggregateTopicElement* AggregateTopicTable::getClientList(Topic* client)
|
||||
{
|
||||
// ToDo: AggregateGW
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user