#pragma once #include "mongoose.h" #include "Line4C3client.h" static void event_handle(struct mg_connection* connection, int event_type, void* event_data, void* pUser) { struct http_message* hm = (struct http_message*)event_data; int connect_status; string* str_tmp=0; switch (event_type) { case MG_EV_CONNECT: connect_status = *(int*)event_data; if (connect_status != 0)//socket error { char char_tmp[64] = { 0 }; sprintf(char_tmp, "{\"connect failed, error code: %u\":%u}", connect_status); str_tmp = (string*)pUser; *str_tmp = char_tmp; }//socket ok break; case MG_EV_HTTP_REPLY: connection->flags |= MG_F_SEND_AND_CLOSE; str_tmp = (string*)pUser; *str_tmp = string(hm->body.p, hm->body.len); break; case MG_EV_CLOSE: break; case MG_EV_HTTP_CHUNK: break; default: break; } } int Fclient::Sendreq(string& sendUrl, string& sendHeader, string& reqData, string& req_callback) { int flag = 0; //返回-1代表通信失败, 0表示超时, 1代表正常接收数据 string str_url = sendUrl; struct mg_mgr mgr={0}; struct mg_connection* nc=NULL; mg_mgr_init(&mgr, NULL); // nc = mg_connect_http(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); int findResult = -1; findResult = str_url.find("stop"); if (findResult<0) nc = mg_connect_http(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); else nc = mg_connect_httpDEL(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); unsigned long preTime = 0, nowTime = 0; preTime = GetTimetmp(); while (1) { if (req_callback.length() > 0) { findResult = -1; findResult = req_callback.find("connect failed, error code:"); if (findResult < 0) flag = 1;//Rx ok ret=1 else return -1;// -1 = Socket Error break; } mg_mgr_poll(&mgr, 1000); nowTime = GetTimetmp(); if (nowTime - preTime >= 8) { break;//RxTimeout ret=0 } } mg_mgr_free(&mgr); return flag; }