#pragma once #include "mongoose.h" #include "ZJ_ACSclient.h" unsigned long GetTimetmp() { unsigned long stampNow = 0; time_t timer; timer = time(NULL); stampNow = timer; return stampNow; } 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; switch (event_type) { case MG_EV_CONNECT: { connect_status = *(int*)event_data; if (connect_status != 0) { char char_tmp[64] = { 0 }; sprintf(char_tmp, "{\"connect failed, error code: %u\":%u}", connect_status); string* str_tmp = (string*)pUser; *str_tmp = char_tmp; } } break; case MG_EV_HTTP_REPLY: { connection->flags |= MG_F_SEND_AND_CLOSE; string* 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 type) { 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); switch (type) //type 1:post or get 2:delete 3:put 4:post { case 1: nc = mg_connect_http(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); break; case 2: nc = mg_connect_httpDEL(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); break; case 3: nc = mg_connect_httpPUT(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); break; case 4: nc = mg_connect_httpPOST(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); break; default: nc = mg_connect_http(&mgr, event_handle, &req_callback, str_url.c_str(), sendHeader.c_str(), reqData.c_str()); break; } mg_set_protocol_http_websocket(nc); unsigned long preTime = 0, nowTime = 0; preTime = GetTimetmp(); while (1) { if (req_callback.length() > 0) { flag = 1; if (req_callback.find("connect failed")) flag = -1; break; } mg_mgr_poll(&mgr, 1000); nowTime = GetTimetmp(); if (nowTime - preTime >= 15) { flag = 0; break; } } mg_mgr_free(&mgr); return flag; }