int Init(uint32_t buf_size) { int ret = Mqtt_InitContext(m_ctx, buf_size); if(MQTTERR_NOERROR != ret) { return ret; } T *real_obj = static_cast<T*>(this); m_ctx->read_func_arg = real_obj; m_ctx->read_func = &T::_Read; m_ctx->writev_func_arg = real_obj; m_ctx->writev_func = &T::_Writev; m_ctx->handle_ping_resp_arg = real_obj; m_ctx->handle_ping_resp = &T::_HandlePingResp; m_ctx->handle_conn_ack_arg = real_obj; m_ctx->handle_conn_ack = &T::_HandleConnAck; m_ctx->handle_publish_arg = real_obj; m_ctx->handle_publish = &T::_HandlePublish; m_ctx->handle_pub_ack_arg = real_obj; m_ctx->handle_pub_ack = &T::_HandlePubAck; m_ctx->handle_pub_rec_arg = real_obj; m_ctx->handle_pub_rec = &T::_HandlePubRec; m_ctx->handle_pub_rel_arg = real_obj; m_ctx->handle_pub_rel = &T::_HandlePubRel; m_ctx->handle_pub_comp_arg = real_obj; m_ctx->handle_pub_comp = &T::_HandlePubComp; m_ctx->handle_sub_ack_arg = real_obj; m_ctx->handle_sub_ack = &T::_HandleSubAck; m_ctx->handle_unsub_ack_arg = real_obj; m_ctx->handle_unsub_ack = &T::_HandleUnsubAck; m_ctx->handle_cmd_arg = real_obj; m_ctx->handle_cmd = &T::_HandleCmd; m_valid = true; return MQTTERR_NOERROR; }
/** * @brief 初始化MQTT上下文,开发者主要替换设备ID,项目ID和API_KEY * @param ctx:上下文变量 * @retval ret:0,成功,<0 失败 **/ static int MqttSample_Init(struct MqttSampleContext *ctx) { int err; ctx->sendedbytes = 0; ctx->proid = MQTT_DEVICE_PROJ_ID; ctx->devid = MQTT_DEVICE_ID; ctx->apikey = MQTT_DEVICE_API_KEY; ctx->publish_state = 0; err = Mqtt_InitContext(ctx->mqttctx, 1 << 8); if(MQTTERR_NOERROR != err) { printf("Failed to init the MQTT context errcode is %d", err); return -1; } ctx->mqttctx->read_func = MqttSample_RecvPkt; ctx->mqttctx->writev_func = MqttSample_SendPkt; ctx->mqttctx->handle_conn_ack = MqttSample_HandleConnAck; ctx->mqttctx->handle_conn_ack_arg = ctx; ctx->mqttctx->handle_ping_resp = MqttSample_HandlePingResp; ctx->mqttctx->handle_ping_resp_arg = ctx; ctx->mqttctx->handle_publish = MqttSample_HandlePublish; ctx->mqttctx->handle_publish_arg = ctx; ctx->mqttctx->handle_pub_ack = MqttSample_HandlePubAck; ctx->mqttctx->handle_pub_ack_arg = ctx; ctx->mqttctx->handle_pub_rec = MqttSample_HandlePubRec; ctx->mqttctx->handle_pub_rec_arg = ctx; ctx->mqttctx->handle_pub_rel = MqttSample_HandlePubRel; ctx->mqttctx->handle_pub_rel_arg = ctx; ctx->mqttctx->handle_pub_comp = MqttSample_HandlePubComp; ctx->mqttctx->handle_pub_comp_arg = ctx; ctx->mqttctx->handle_sub_ack = MqttSample_HandleSubAck; ctx->mqttctx->handle_sub_ack_arg = ctx; ctx->mqttctx->handle_unsub_ack = MqttSample_HandleUnsubAck; ctx->mqttctx->handle_unsub_ack_arg = ctx; ctx->mqttctx->handle_cmd = MqttSample_HandleCmd; ctx->mqttctx->handle_cmd_arg = ctx; ctx->cmdid[0] = '\0'; MqttBuffer_Init(ctx->mqttbuf); return 0; }
static int MqttSample_Init(struct MqttSampleContext *ctx) { struct epoll_event event; int err; ctx->sendedbytes = -1; ctx->mqttfd = -1; ctx->host = "192.168.200.218"; ctx->port = 6002; ctx->proid = "433223"; ctx->devid = "45523"; ctx->apikey = "Bs04OCJioNgpmvjRphRak15j7Z8="; err = Mqtt_InitContext(ctx->mqttctx, 1 << 20); if(MQTTERR_NOERROR != err) { printf("Failed to init the MQTT context errcode is %d", err); return -1; } ctx->mqttctx->read_func = MqttSample_RecvPkt; ctx->mqttctx->read_func_arg = (void*)(size_t)ctx->mqttfd; ctx->mqttctx->writev_func_arg = (void*)(size_t)ctx->mqttfd; ctx->mqttctx->writev_func = MqttSample_SendPkt; ctx->mqttctx->handle_conn_ack = MqttSample_HandleConnAck; ctx->mqttctx->handle_conn_ack_arg = ctx; ctx->mqttctx->handle_ping_resp = MqttSample_HandlePingResp; ctx->mqttctx->handle_ping_resp_arg = ctx; ctx->mqttctx->handle_publish = MqttSample_HandlePublish; ctx->mqttctx->handle_publish_arg = ctx; ctx->mqttctx->handle_pub_ack = MqttSample_HandlePubAck; ctx->mqttctx->handle_pub_ack_arg = ctx; ctx->mqttctx->handle_pub_rec = MqttSample_HandlePubRec; ctx->mqttctx->handle_pub_rec_arg = ctx; ctx->mqttctx->handle_pub_rel = MqttSample_HandlePubRel; ctx->mqttctx->handle_pub_rel_arg = ctx; ctx->mqttctx->handle_pub_comp = MqttSample_HandlePubComp; ctx->mqttctx->handle_pub_comp_arg = ctx; ctx->mqttctx->handle_sub_ack = MqttSample_HandleSubAck; ctx->mqttctx->handle_sub_ack_arg = ctx; ctx->mqttctx->handle_unsub_ack = MqttSample_HandleUnsubAck; ctx->mqttctx->handle_unsub_ack_arg = ctx; ctx->mqttctx->handle_cmd = MqttSample_HandleCmd; ctx->mqttctx->handle_cmd_arg = ctx; ctx->cmdid[0] = '\0'; MqttBuffer_Init(ctx->mqttbuf); ctx->epfd = epoll_create(10); if(ctx->epfd < 0) { printf("Failed to create the epoll instance.\n"); return -1; } if(fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK) < 0) { printf("Failed to set the stdin to nonblock mode, errcode is %d.\n", errno); return -1; } event.data.fd = STDIN_FILENO; event.events = EPOLLIN; if(epoll_ctl(ctx->epfd, EPOLL_CTL_ADD, STDIN_FILENO, &event) < 0) { printf("Failed to add the stdin to epoll, errcode is %d.\n", errno); return -1; } return 0; }