#include "DebugNetwork.h" #include #include #include #include #include #include #include #include "pthread.h" #include #include #include "ev_proto.h" #include "face_daemon_proto.h" #define STFACE_SERVER_IP "52.79.232.163" #define STFACE_SERVER_PORT "15432" #define STFACE_RECV_BUFFER_SIZE 1024 #define STFACE_DEBUG_NETWORK_SYNC false std::string g_dbgLog; struct SocketClientContext { pthread_t daemon_thid; uint8_t* buffer; size_t buffSize; SocketClientContext() : daemon_thid(0), buffer(nullptr), buffSize(0) { } ~SocketClientContext() { //pthread_join(daemon_thid, NULL); delete[] buffer; buffer = nullptr; buffSize = 0; } static void* daemon_thd(void* arg) { SocketClientContext* ctx = (SocketClientContext*)arg; //g_dbgLog = ""; int clientfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); if (clientfd < 0) { LOG_WARN << "socket create error errno=" << errno << LOG_ENDL; delete ctx; return nullptr; } struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(STFACE_SERVER_IP); servaddr.sin_port = htons(atoi(STFACE_SERVER_PORT)); /* Establish connection */ if (connect(clientfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { LOG_WARN << "socket connect error errno=" << errno << LOG_ENDL; close(clientfd); delete ctx; return nullptr; } if (send(clientfd, ctx->buffer, ctx->buffSize, 0) != ctx->buffSize) { LOG_WARN << "Mismatch in number of sent bytes" << LOG_ENDL; } int recvSize = recv(clientfd, ctx->buffer, STFACE_RECV_BUFFER_SIZE, 0); ctx->buffer[recvSize] = '\0'; g_dbgLog = (char*)ctx->buffer; LOG_NOTICE << "face detect result: " << ctx->buffer << LOG_ENDL; close(clientfd); delete ctx; } void sendBuff(uint8_t* _buffer, size_t _buffSize) { if (_buffer != nullptr) { buffer = new uint8_t[_buffSize + STFACE_RECV_BUFFER_SIZE]; // more for receive memcpy(buffer, _buffer, _buffSize); buffSize = _buffSize; } if(STFACE_DEBUG_NETWORK_SYNC) { } else { int ret = pthread_create(&daemon_thid, NULL, daemon_thd, this); if(ret != 0) { LOGP(ERROR, "pthread_create: %s/n", strerror(ret)); delete this; return; } } } }; void dbgSendFaceDetect(uint8_t* buffer, size_t buffSize) { SocketClientContext* ctx = new SocketClientContext; ctx->sendBuff(buffer, buffSize); // delete ctx itself } void dbgSendFaceAdd(const NativeImgIdx& imgidx, uint8_t* buffImg) { SocketClientContext* ctx = new SocketClientContext; ctx->buffer = new uint8_t[sizeof(EVPHeader) + sizeof(FDP_Image) + imgidx.size + STFACE_RECV_BUFFER_SIZE]; // more for receive EVPHeader* evpHeader = new (ctx->buffer) EVPHeader; FDP_Image* fdpImage = new (ctx->buffer + sizeof(EVPHeader)) FDP_Image; evpHeader->proto = EVPProto::EVPP_RAW_BIN; evpHeader->cmd = FaceDaemonCommand::FDC_SENSETIMEFACEDETECT_SAVE; evpHeader->size = sizeof(EVPHeader) + sizeof(FDP_Image) + imgidx.size; fdpImage->db_id = 1001; fdpImage->mb_type = imgidx.type; fdpImage->width = imgidx.width; fdpImage->height = imgidx.height; fdpImage->size = 0;//#todo memcpy(fdpImage->buff, buffImg, imgidx.size); ctx->buffSize = evpHeader->size; evpHeader->hton(); fdpImage->hton(); ctx->sendBuff(nullptr, 0); // delete ctx itself }