整理HttpClient
							parent
							
								
									9c2146ac04
								
							
						
					
					
						commit
						0edab63028
					
				@ -0,0 +1,95 @@
 | 
				
			||||
#include "HttpClient.h"
 | 
				
			||||
#define  CLIENT_FILE_DIR  "/ClientFiles";
 | 
				
			||||
#define CMD_GetFileList   "GetFileList"
 | 
				
			||||
 | 
				
			||||
static string GetExeDir()
 | 
				
			||||
{
 | 
				
			||||
	char buff[_MAX_PATH];
 | 
				
			||||
	_getcwd(buff, _MAX_PATH);
 | 
				
			||||
	string currPath(buff);
 | 
				
			||||
	return string(buff);
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
CHttpClient::CHttpClient(string IP, int Port)
 | 
				
			||||
{
 | 
				
			||||
	m_HostIP = IP;
 | 
				
			||||
	m_HostPort = Port;
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
CHttpClient::~CHttpClient()
 | 
				
			||||
{
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
bool CHttpClient::DownloadFile(const string& file_name)
 | 
				
			||||
{
 | 
				
			||||
	httplib::Client cli(m_HostIP, m_HostPort);
 | 
				
			||||
	auto res = cli.Get(("/download/" + file_name).c_str());
 | 
				
			||||
	if (res && res->status == 200)
 | 
				
			||||
	{
 | 
				
			||||
		string save_path = GetExeDir() + CLIENT_FILE_DIR;
 | 
				
			||||
		save_path += "/";
 | 
				
			||||
		save_path += file_name;
 | 
				
			||||
		// ´ò¿ªÎļþ½øÐÐдÈë
 | 
				
			||||
		ofstream file(save_path, ios::binary);
 | 
				
			||||
		if (!file) 
 | 
				
			||||
		{
 | 
				
			||||
			cerr << "Failed to save file: " << save_path << endl;
 | 
				
			||||
			return false;
 | 
				
			||||
		}
 | 
				
			||||
		file.write(res->body.c_str(), res->body.size());
 | 
				
			||||
		file.close();
 | 
				
			||||
		cout << "File downloaded and saved at: " << save_path << endl;
 | 
				
			||||
		return true;
 | 
				
			||||
	}
 | 
				
			||||
	else
 | 
				
			||||
	{
 | 
				
			||||
		cerr << "Failed to download file. Status code: "
 | 
				
			||||
			   << (res ? to_string(res->status) : "No response") << endl;
 | 
				
			||||
		return false;
 | 
				
			||||
	}
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
bool CHttpClient::SendCmd(const string cmd, string & sRespon)
 | 
				
			||||
{
 | 
				
			||||
	httplib::Client cli(m_HostIP,m_HostPort);
 | 
				
			||||
	auto res = cli.Get(("/command/" + cmd).c_str());
 | 
				
			||||
 | 
				
			||||
	if (res && res->status == 200)
 | 
				
			||||
	{
 | 
				
			||||
		sRespon = res->body;
 | 
				
			||||
		cout << "Command Respon:" << sRespon << endl;
 | 
				
			||||
		return true;
 | 
				
			||||
	}
 | 
				
			||||
	else
 | 
				
			||||
	{
 | 
				
			||||
		sRespon.clear();
 | 
				
			||||
		string sErr = "SendCmd Failed. Status code: ";
 | 
				
			||||
		sErr += res ? to_string(res->status) : "No response";
 | 
				
			||||
		cerr << sErr << endl;
 | 
				
			||||
		return false;
 | 
				
			||||
	}
 | 
				
			||||
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
bool CHttpClient::DownloadAllFile()
 | 
				
			||||
{
 | 
				
			||||
	string sRespon;
 | 
				
			||||
	if (!SendCmd(CMD_GetFileList, sRespon))
 | 
				
			||||
		return false;
 | 
				
			||||
 | 
				
			||||
	CString FullStr = sRespon.data();
 | 
				
			||||
	CString strNameValue; // an individual name, value pair
 | 
				
			||||
 | 
				
			||||
	int i = 0; // substring index to extract
 | 
				
			||||
	while (AfxExtractSubString(strNameValue, FullStr, i,','))
 | 
				
			||||
	{
 | 
				
			||||
		if (!strNameValue.IsEmpty())
 | 
				
			||||
		{
 | 
				
			||||
			DownloadFile(strNameValue.GetBuffer());
 | 
				
			||||
			strNameValue.ReleaseBuffer();
 | 
				
			||||
		}		
 | 
				
			||||
		i++;
 | 
				
			||||
	}
 | 
				
			||||
	return true;
 | 
				
			||||
}
 | 
				
			||||
@ -0,0 +1,25 @@
 | 
				
			||||
#pragma once
 | 
				
			||||
#define _AFXDLL
 | 
				
			||||
#include <afxwin.h>
 | 
				
			||||
#include <iostream>
 | 
				
			||||
#include <fstream>
 | 
				
			||||
#include <string>
 | 
				
			||||
#include <direct.h>
 | 
				
			||||
#include "../cpp-httplib/httplib.h"
 | 
				
			||||
using namespace std;
 | 
				
			||||
using namespace httplib;
 | 
				
			||||
 | 
				
			||||
class CHttpClient
 | 
				
			||||
{
 | 
				
			||||
public:
 | 
				
			||||
	CHttpClient(string IP, int Port);
 | 
				
			||||
	virtual ~CHttpClient();
 | 
				
			||||
	bool DownloadAllFile();
 | 
				
			||||
	bool SendCmd(const string cmd, string & sRespon); //发送命令,返回值为Server响应(字符串)
 | 
				
			||||
	bool DownloadFile(const string & file_name);
 | 
				
			||||
	void SetRemote(string IP, int Port) {m_HostIP = IP;m_HostPort	= Port;	};
 | 
				
			||||
private:
 | 
				
			||||
	string m_HostIP = "127.0.0.1";
 | 
				
			||||
	int	  m_HostPort = 1234;
 | 
				
			||||
};
 | 
				
			||||
 | 
				
			||||
					Loading…
					
					
				
		Reference in New Issue