in source/core_mqtt_agent.c [996:1034]
MQTTStatus_t MQTTAgent_CommandLoop( MQTTAgentContext_t * pMqttAgentContext )
{
MQTTAgentCommand_t * pCommand;
MQTTStatus_t operationStatus = MQTTSuccess;
bool endLoop = false;
/* The command queue should have been created before this task gets created. */
if( ( pMqttAgentContext == NULL ) || ( pMqttAgentContext->agentInterface.pMsgCtx == NULL ) )
{
operationStatus = MQTTBadParameter;
}
/* Loop until an error or we receive a terminate command. */
while( operationStatus == MQTTSuccess )
{
/* Wait for the next command, if any. */
pCommand = NULL;
( void ) pMqttAgentContext->agentInterface.recv(
pMqttAgentContext->agentInterface.pMsgCtx,
&( pCommand ),
MQTT_AGENT_MAX_EVENT_QUEUE_WAIT_TIME
);
operationStatus = processCommand( pMqttAgentContext, pCommand, &endLoop );
if( operationStatus != MQTTSuccess )
{
LogError( ( "MQTT operation failed with status %s\n",
MQTT_Status_strerror( operationStatus ) ) );
}
/* Terminate the loop on disconnects, errors, or the termination command. */
if( endLoop )
{
break;
}
}
return operationStatus;
}