bool MqttClient::connect(String clientName, String username, String password) { if (getConnectionState() != eTCS_Ready) { close(); debugf("MQTT closed previous connection"); } debugf("MQTT start connection"); mqtt_init(&broker, clientName.c_str()); if (clientName.length() > 0) mqtt_init_auth(&broker, username.c_str(), password.c_str()); if(server) { TcpClient::connect(server, port); } else { TcpClient::connect(serverIp, port); } mqtt_set_alive(&broker, keepAlive); broker.socket_info = (void*)this; broker.send = staticSendPacket; int res = mqtt_connect(&broker); setTimeOut(USHRT_MAX); return res > 0; }
/*********************************************************** * * return : 0 success ,1 error * *************************************************************/ int32 Mqtt_SendConnetPacket( mqtt_broker_handle_t *pstBroketHandle, int32 socketid,const int8* username,const int8* password ) { int32 ret; if( (username==NULL) || (password==NULL) )// 匿名登录 GAgent V4 will not runing this code. { return 1; } else // 用户登录 { mqtt_init( pstBroketHandle,username ); mqtt_init_auth(pstBroketHandle,username,password ); } mqtt_set_alive(pstBroketHandle, CLOUD_MQTT_SET_ALIVE); pstBroketHandle->socketid = socketid; pstBroketHandle->mqttsend = send_packet; ret = mqtt_connect(pstBroketHandle); if (ret != 0) { GAgent_Printf(GAGENT_WARNING,"mqtt send connect packet is failed with:%d", ret); return 1; } GAgent_Printf(GAGENT_INFO, "Mqtt_SendConnetPacket OK, write:%d", ret); return 0; }
int init_socket(mqtt_broker_handle_t* broker, const char* hostname, short port) { int flag = 1; int keepalive = 3; // Seconds // Create the socket if((socket_id = socket(PF_INET, SOCK_STREAM, 0)) < 0) return -1; // Disable Nagle Algorithm if (setsockopt(socket_id, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag)) < 0) return -2; struct sockaddr_in socket_address; // Create the stuff we need to connect socket_address.sin_family = AF_INET; socket_address.sin_port = htons(port); socket_address.sin_addr.s_addr = inet_addr(hostname); // Connect the socket if((connect(socket_id, (struct sockaddr*)&socket_address, sizeof(socket_address))) < 0) return -1; // MQTT stuffs mqtt_set_alive(broker, keepalive); broker->socket_info = (void*)&socket_id; broker->send = send_packet; return 0; }
/****************************************************************** * function : Cloud_MQTT_initSocket * broker : mqtt struct * flag : 0 wifi module to register socketid. * 1 wifi module to login socketid * * ********************************************************************/ int Cloud_MQTT_initSocket( mqtt_broker_handle_t* broker,int flag ) { int ret; // int MTflag; struct sockaddr_in Msocket_address; char MqttServerIpAddr[32]; int iSocketId; // int packetLen; char *domain = g_Xpg_GlobalVar.m2m_SERVER; unsigned short port = g_Xpg_GlobalVar.m2m_Port; memset(MqttServerIpAddr, 0x0, sizeof(MqttServerIpAddr)); ret = GAgent_GetHostByName( domain, MqttServerIpAddr ); if(ret !=0 ) { GAgent_Printf(GAGENT_ERROR,"Gethostbyname(%s) fail ret:%d", domain, ret); return 1; //域名解析失败 } GAgent_Printf(GAGENT_INFO,"MQTT Connect Domain:%s IP:%s \r\n", domain, MqttServerIpAddr); if( broker->socketid!=-1 ) { GAgent_Printf(GAGENT_INFO,"Cloud_MQTT_initSocket close[%04x] mqtt socket", broker->socketid); close_socket(broker); } if( (iSocketId = socket(AF_INET, SOCK_STREAM, 0))<0) { GAgent_Printf(GAGENT_ERROR," MQTT socket init fail"); return 1; } ret = connect_mqtt_socket(iSocketId, &Msocket_address, port, MqttServerIpAddr); if (ret < 0) { GAgent_Printf(GAGENT_WARNING,"mqtt socket connect fail with:%d", ret); close(iSocketId); return 3; } /*For Test MQTT Read And Write Func*/ MQTT_handlePacket(); GAgent_Printf(GAGENT_LOG, "Created mqtt socketid[%08x]", iSocketId); // MQTT stuffs mqtt_set_alive(broker, MQTT_HEARTBEAT); broker->socketid = iSocketId; broker->mqttsend = send_packet; return 0; }
int init_socket(mqtt_broker_handle_t* broker, int keepalive) { int flag = 1; socket_id = wifi_connect_server(); if(socket_id >= 8) { return -1; } // MQTT stuffs mqtt_set_alive(broker, keepalive); broker->socket_info = socket_id; //broker->send = send_packet; return 0; }
void app_mqtt_init(mqtt_broker_handle_t *broker) { mqtt_init(broker, "HF_mc300"); mqtt_init_auth(broker, NULL, NULL); mqtt_set_alive(broker, MQTT_KEEPALIVE_SEC); }