基于mtk2625 mqtt协议移植

static void *MqttServerThread(void *pArg)
{
int i,OldStatus,RetryCount,ReadyFdNum,MaxFd,UserIndex;
DWORD TimeOut,DelayCount=0,MaxDelayCount=10;
struct in_addr LocalAddr;
fd_set Rset,Wset;
char RecvBuf[2*1024];
int FdNum,rc;
DWORD TimeOutMS,Len;
DWORD LastSysRunTime,CurrSysRunTime;
DWORD LastFlushTime=0,CurrFlushTime;
DWORD LastRegingTime=0,CurrRegingTime;
fd_set ReadFdSet;
int32_t MqttError;
uint32_t MqttCid = -1;
uint32_t mqtt_id;
Network n;
Client c;
char* c_port="6002";
unsigned char buf[100];
unsigned char readbuf[100];
char* topic="ai_1";
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;


TimeOut=50;
LocalAddr.s_addr=htonl(sFsuMqttServer.IPAddr);
GET_CURRENT_SYS_TIME(LastSysRunTime);
for(RetryCount=0;;)
{
if(sFsuMqttServer.IsReqServerQuit)
{
sFsuMqttServer.IsReqServerQuit=FALSE;
break;
}
pthread_testcancel();


if(!sFsuMqttServer.m_IsCreated)
        {
       MqttError=MqttServerOpen(sFsuMqttServer.m_MqttServerIp,sFsuMqttServer.m_MqttServerPort,sFsuMqttServer.m_MqttTimeOut,sFsuMqttServer.m_MqttDataSize,MqttCid,&mqtt_id);
if (MqttError==MQTT_ERRID_OK) 
{
           sFsuMqttServer.m_IsCreated=TRUE;
GET_CURRENT_SYS_TIME(LastFlushTime);
GET_CURRENT_SYS_TIME(LastRegingTime);
       }
else 
{
           sFsuMqttServer.m_IsCreated=FALSE;
sleep(5);
continue;
       } 
}
if(!sFsuMqttServer.m_IsOpened)
        {
        uint32_t version=4;
uint32_t keep_alive=120;
uint32_t clean_session=0;
uint32_t will_flag=0;
MQTTPacket_willOptions will_options = MQTTPacket_willOptions_initializer;

       MqttError=MqttConnect(mqtt_id,version,sFsuMqttServer.m_DeviceID,keep_alive,clean_session,will_flag,&will_options,sFsuMqttServer.m_ProductID,sFsuMqttServer.m_AuthInfo);
if (MqttError==MQTT_ERRID_OK) 
{
           sFsuMqttServer.m_IsOpened=TRUE;
GET_CURRENT_SYS_TIME(LastFlushTime);
GET_CURRENT_SYS_TIME(LastRegingTime);
       }
else 
{
           sFsuMqttServer.m_IsOpened=FALSE;
sleep(5);
continue;
       } 
}

for(RetryCount=0,DelayCount=0;;)
{
if(sFsuMqttServer.IsReqServerQuit)
break;
pthread_testcancel();


for (i = 0; i < MQTT_INSTANCE_NUM; i++) 
{
            //xSemaphoreTakeRecursive(g_mqtt_at_mutex_handle, portMAX_DELAY);
            if (gMqttContext[i].is_connected) 
{
                MQTTYield(gMqttContext[i].client, 1000);
            }
            //xSemaphoreGiveRecursive(g_mqtt_at_mutex_handle);
        }
sleep(1);
}
}


return NULL;
}

extern BOOL MQ_FsuMqttInit(DWORD DevRef, char* DeviceID, char* ProductID, char* AuthInfo)
{
int OldStatus;


if(DeviceID==NULL || ProductID==NULL || AuthInfo==NULL)
{
return FALSE;
}
PTHREAD_MUTEX_SAFE_LOCK(sFsuMqttMutex,OldStatus);
if(sFsuMqttServer.IsOpenedServer)
{
PTHREAD_MUTEX_SAFE_UNLOCK(sFsuMqttMutex,OldStatus);
return TRUE;
}
sFsuMqttServer.m_DevRef=DevRef;
strcpy(sFsuMqttServer.m_DeviceID,DeviceID);
strcpy(sFsuMqttServer.m_ProductID,ProductID);
strcpy(sFsuMqttServer.m_AuthInfo,AuthInfo);
strcpy(sFsuMqttServer.m_MqttServerIp,"183.230.40.39");
sFsuMqttServer.m_MqttServerPort=6002;
sFsuMqttServer.m_MqttTimeOut=1200;
sFsuMqttServer.m_MqttDataSize=100;
sFsuMqttServer.ListenFd=SOCKET_INVALID_FD;
if(pthread_create(&sFsuMqttServer.ptServerThreadID,NULL,MqttServerThread,NULL)!=STD_SUCCESS)
{
PTHREAD_MUTEX_SAFE_UNLOCK(sFsuMqttMutex,OldStatus);
return FALSE;
}
sFsuMqttServer.IsOpenedServer=TRUE;
PTHREAD_MUTEX_SAFE_UNLOCK(sFsuMqttMutex,OldStatus);
return TRUE;
}

extern void MQ_FsuMqttUnInit(void)
{
int i,OldStatus;


PTHREAD_MUTEX_SAFE_LOCK(sFsuMqttMutex,OldStatus);
if(sFsuMqttServer.IsOpenedServer)
{
sFsuMqttServer.IsReqServerQuit=TRUE;
usleep(2000);
if(sFsuMqttServer.IsReqServerQuit)
pthread_cancel(sFsuMqttServer.ptServerThreadID);
pthread_join(sFsuMqttServer.ptServerThreadID,NULL);
sFsuMqttServer.ptServerThreadID=INVALID_PTHREAD_ID;
sFsuMqttServer.IsReqServerQuit=FALSE;
sFsuMqttServer.IsOpenedServer=FALSE;
}
PTHREAD_MUTEX_SAFE_UNLOCK(sFsuMqttMutex,OldStatus);
}

extern void MQ_FsuMqttPublish(DWORD mqtt_id, char* topic, DWORD qos, DWORD retained, DWORD dup, DWORD msg_len, const char *msg)
{
if(topic==NULL || msg==NULL)
return;

MqttPublish(mqtt_id,topic,qos,retained,dup,msg_len,msg);
}


extern void MQ_FsuMqttSubscribe(DWORD mqtt_id, char* topic, DWORD qos)
{
if(topic==NULL)
return;

MqttSubscribe(mqtt_id,topic,qos);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值