Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
tomoaki
2016-12-15 11:40:17 +09:00
parent d386541c1a
commit 1a415bfebd
4 changed files with 56 additions and 26 deletions

View File

@@ -131,11 +131,19 @@ void BrokerRecvTask::run(void)
}
else
{
if ( rc == 0 )
if ( rc == 0 ) // Disconnected
{
client->getNetwork()->close();
delete packet;
goto nextClient;
/* delete client when the client is not authorized on & session is clean */
_gateway->getClientList()->erase(client);
if ( client )
{
client = client->getNextClient();
}
continue;
}
else if (rc == -1)
{

View File

@@ -125,30 +125,34 @@ bool ClientList::authorize(const char* fileName)
void ClientList::erase(Client* client)
{
_mutex.lock();
Client* prev = client->_prevClient;
Client* next = client->_nextClient;
if ( !_authorize && client->erasable())
{
_mutex.lock();
Client* prev = client->_prevClient;
Client* next = client->_nextClient;
if (prev)
{
prev->_nextClient = next;
}
else
{
_firstClient = next;
if (prev)
{
prev->_nextClient = next;
}
else
{
_firstClient = next;
}
if (next)
{
next->_prevClient = prev;
}
else
{
_endClient = prev;
}
_clientCnt--;
delete client;
client = 0;
_mutex.unlock();
}
if (next)
{
next->_prevClient = prev;
}
else
{
_endClient = prev;
}
_clientCnt--;
_authorize = false;
_mutex.unlock();
}
Client* ClientList::getClient(SensorNetAddress* addr)
@@ -280,6 +284,8 @@ Client::Client(bool secure)
_sensorNetype = true;
_connAck = 0;
_waitWillMsgFlg = false;
_sessionStatus = false;
_otaClient = 0;
_prevClient = 0;
_nextClient = 0;
}
@@ -389,6 +395,16 @@ void Client::setKeepAlive(MQTTSNPacket* packet)
}
}
void Client::setSessionStatus(bool status)
{
_sessionStatus = status;
}
bool Client::erasable(void)
{
return _sessionStatus;
}
void Client::updateStatus(MQTTSNPacket* packet)
{
if (((_status == Cstat_Disconnected) || (_status == Cstat_Lost)) && packet->getType() == MQTTSN_CONNECT)

View File

@@ -271,6 +271,8 @@ public:
char* getWillMsg(void);
const char* getStatus(void);
void setWaitWillMsgFlg(bool);
void setSessionStatus(bool); // true: clean session
bool erasable(void);
bool isDisconnect(void);
bool isActive(void);
@@ -312,6 +314,8 @@ private:
bool _sensorNetype; // false: unstable network like a G3
SensorNetAddress _sensorNetAddr;
bool _sessionStatus;
Client* _nextClient;
Client* _prevClient;
Client* _otaClient;

View File

@@ -55,14 +55,14 @@ void MQTTSNConnectionHandler::handleSearchgw(MQTTSNPacket* packet)
{
if (packet->getType() == MQTTSN_SEARCHGW)
{
if (_gateway->getClientList()->getClientCount() < MAX_CLIENTS)
{
//if (_gateway->getClientList()->getClientCount() < MAX_CLIENTS)
//{
MQTTSNPacket* gwinfo = new MQTTSNPacket();
gwinfo->setGWINFO(_gateway->getGWParams()->gatewayId);
Event* ev1 = new Event();
ev1->setBrodcastEvent(gwinfo);
_gateway->getClientSendQue()->post(ev1);
}
//}
}
}
@@ -94,6 +94,7 @@ void MQTTSNConnectionHandler::handleConnect(Client* client, MQTTSNPacket* packet
connectData->flags.bits.username = 1;
}
client->setSessionStatus(false);
if (data.cleansession)
{
connectData->flags.bits.cleanstart = 1;
@@ -108,6 +109,7 @@ void MQTTSNConnectionHandler::handleConnect(Client* client, MQTTSNPacket* packet
}
topics = new Topics();
client->setTopics(topics);
client->setSessionStatus(true);
}
if (data.willFlag)