From 15a4ce765d6f4bfd34bc3d28cdfe8694513c285c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E6=A0=91=E6=96=B0?= Date: Sun, 21 Jan 2024 23:12:03 +0800 Subject: [PATCH] Test GUI fiber --- lib_fiber/samples-gui/HttpGet/HttpClient.cpp | 12 +++- lib_fiber/samples-gui/HttpGet/HttpClient.h | 2 +- lib_fiber/samples-gui/HttpGet/HttpGet.rc | Bin 12880 -> 13284 bytes lib_fiber/samples-gui/HttpGet/HttpGet.vcxproj | 2 +- lib_fiber/samples-gui/HttpGet/HttpGetDlg.cpp | 55 +++++++++++++++++- lib_fiber/samples-gui/HttpGet/HttpGetDlg.h | 7 ++- lib_fiber/samples-gui/HttpGet/resource.h | 6 +- 7 files changed, 74 insertions(+), 10 deletions(-) diff --git a/lib_fiber/samples-gui/HttpGet/HttpClient.cpp b/lib_fiber/samples-gui/HttpGet/HttpClient.cpp index 40498703c..a68c572ab 100644 --- a/lib_fiber/samples-gui/HttpGet/HttpClient.cpp +++ b/lib_fiber/samples-gui/HttpGet/HttpClient.cpp @@ -18,7 +18,7 @@ CHttpClient::CHttpClient(acl::fiber_tbox& box, const CString& url) CHttpClient::~CHttpClient() {} -void CHttpClient::run(BOOL usePost) +void CHttpClient::run(BOOL usePost, const char *filePath) { acl::http_url hu; if (!hu.parse(m_url.GetString())) { @@ -44,15 +44,21 @@ void CHttpClient::run(BOOL usePost) header.set_url(url.GetString()).accept_gzip(true).set_host(domain); acl::string head; + acl::string body; if (usePost) { header.set_method(acl::HTTP_METHOD_POST); - header.set_content_length(0); + + if (filePath != NULL) { + acl::ifstream::load(filePath, body); + } + + header.set_content_length(body.length()); } header.build_request(head); SetRequestHead(head.c_str()); - if (!request.request(NULL, 0)) { + if (!request.request(body.empty() ? NULL : body.c_str(), body.size())) { SetError("Send request to %s error: %s", addr.GetString(), acl::last_serror()); SetEnd(); diff --git a/lib_fiber/samples-gui/HttpGet/HttpClient.h b/lib_fiber/samples-gui/HttpGet/HttpClient.h index 77eccefae..ed749adcd 100644 --- a/lib_fiber/samples-gui/HttpGet/HttpClient.h +++ b/lib_fiber/samples-gui/HttpGet/HttpClient.h @@ -28,7 +28,7 @@ class CHttpClient CHttpClient(acl::fiber_tbox& mBox, const CString& url); ~CHttpClient(); - void run(BOOL usePost = TRUE); + void run(BOOL usePost = TRUE, const char *filePath = NULL); private: CHttpGetDlg* m_hWin; diff --git a/lib_fiber/samples-gui/HttpGet/HttpGet.rc b/lib_fiber/samples-gui/HttpGet/HttpGet.rc index bf6f3def0ea05406c78225e931059b709db84117..a2bf8c200ea0b57d8ed8a695aa6a31b4f443780a 100644 GIT binary patch delta 492 zcmcbR@+5u30bzbi22%!01|0?k1`{A{G5Nf(uemRSCxaglgXky*R|Y2re})L4iW(pe zX9#A92g*1CMbK1i<`+q1EwH2e2hku--=BKlC9#E zj3$%+i`Oz5Pp*|nW;EUWP=cQkNPUzHW#k0ug}BUL`X-~rnpuhsr=HMU$@y#ZG7c&I;(bzxtM5hu^)|0`7!5J7tP7Fc7 zU;_o0E0CqbU3 zUL&9~L!d$Q2VE_OC diff --git a/lib_fiber/samples-gui/HttpGet/HttpGet.vcxproj b/lib_fiber/samples-gui/HttpGet/HttpGet.vcxproj index 11a9573eb..366f435ba 100644 --- a/lib_fiber/samples-gui/HttpGet/HttpGet.vcxproj +++ b/lib_fiber/samples-gui/HttpGet/HttpGet.vcxproj @@ -161,7 +161,7 @@ Use Level3 true - WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) + WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) pch.h ..\..\..\lib_acl_cpp\include;..\..\..\lib_acl\include;..\..\..\lib_fiber\c\include;..\..\..\lib_fiber\cpp\include /Zc:__cplusplus %(AdditionalOptions) diff --git a/lib_fiber/samples-gui/HttpGet/HttpGetDlg.cpp b/lib_fiber/samples-gui/HttpGet/HttpGetDlg.cpp index 5de77d3b0..c1ff6ced3 100644 --- a/lib_fiber/samples-gui/HttpGet/HttpGetDlg.cpp +++ b/lib_fiber/samples-gui/HttpGet/HttpGetDlg.cpp @@ -50,6 +50,7 @@ END_MESSAGE_MAP() CHttpGetDlg::CHttpGetDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_HTTPGET_DIALOG, pParent) +, m_dosFp(NULL) , m_url("http://www.baidu.com/") , m_length(-1) , m_lastPos(0) @@ -57,6 +58,16 @@ CHttpGetDlg::CHttpGetDlg(CWnd* pParent /*=nullptr*/) , m_downType(0) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + acl::log::stdout_open(true); +} + +CHttpGetDlg::~CHttpGetDlg() +{ + if (m_dosFp) { + fclose(m_dosFp); + m_dosFp = NULL; + FreeConsole(); + } } void CHttpGetDlg::DoDataExchange(CDataExchange* pDX) @@ -81,6 +92,8 @@ BEGIN_MESSAGE_MAP(CHttpGetDlg, CDialogEx) ON_BN_CLICKED(IDC_RADIO_FIBER, &CHttpGetDlg::OnBnClickedRadio) ON_BN_CLICKED(IDC_RADIO_THREAD, &CHttpGetDlg::OnBnClickedRadio) ON_BN_CLICKED(IDC_CHECK_POST, &CHttpGetDlg::OnBnClickedCheckPost) + ON_BN_CLICKED(IDC_BROWSER, &CHttpGetDlg::OnBnClickedBrowser) +ON_BN_CLICKED(IDC_DOS_OPEN, &CHttpGetDlg::OnBnClickedDosOpen) END_MESSAGE_MAP() @@ -198,6 +211,9 @@ void CHttpGetDlg::OnBnClickedStartGet() return; } + CString filePath; + GetDlgItem(IDC_FILE)->GetWindowText(filePath); + m_progress.SetPos(0); m_lastPos = 0; @@ -205,7 +221,7 @@ void CHttpGetDlg::OnBnClickedStartGet() go[=] { CHttpClient client(*this, *url); delete url; - client.run(m_usePost); + client.run(m_usePost, filePath.IsEmpty() ? NULL : filePath.GetString()); }; } else if (m_downType == HTTP_DOWNLOAD_THREAD) { go[=] { @@ -213,7 +229,7 @@ void CHttpGetDlg::OnBnClickedStartGet() std::thread thread([&] { CHttpClient client(box, *url); delete url; - client.run(); + client.run(m_usePost, filePath.IsEmpty() ? NULL : filePath.GetString()); }); thread.detach(); @@ -319,3 +335,38 @@ void CHttpGetDlg::OnBnClickedCheckPost() // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); } + + +void CHttpGetDlg::OnBnClickedBrowser() +{ + // TODO: 在此添加控件通知处理程序代码 + CFileDialog file(TRUE,"文件","",OFN_HIDEREADONLY,"FILE(*.*)|*.*||",NULL); + if(file.DoModal()==IDOK) + { + CString pathname; + + pathname=file.GetPathName(); + GetDlgItem(IDC_FILE)->SetWindowText(pathname); + UpdateData(TRUE); + } +} + + +void CHttpGetDlg::OnBnClickedDosOpen() +{ + // TODO: 在此添加控件通知处理程序代码 + if (m_dosFp == NULL) { + //GetDlgItem(IDC_OPEN_DOS)->EnableWindow(FALSE); + UpdateData(); + AllocConsole(); + m_dosFp = freopen("CONOUT$","w+t",stdout); + CString info(_T("Close DOS")); + GetDlgItem(IDC_DOS_OPEN)->SetWindowText(info); + } else { + fclose(m_dosFp); + m_dosFp = NULL; + FreeConsole(); + CString info(_T("Open DOS")); + GetDlgItem(IDC_DOS_OPEN)->SetWindowText(info); + } +} diff --git a/lib_fiber/samples-gui/HttpGet/HttpGetDlg.h b/lib_fiber/samples-gui/HttpGet/HttpGetDlg.h index 36027bd0d..5a851857c 100644 --- a/lib_fiber/samples-gui/HttpGet/HttpGetDlg.h +++ b/lib_fiber/samples-gui/HttpGet/HttpGetDlg.h @@ -15,16 +15,16 @@ class CHttpGetDlg : public CDialogEx // 构造 public: CHttpGetDlg(CWnd* pParent = nullptr); // 标准构造函数 + ~CHttpGetDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_HTTPGET_DIALOG }; #endif - protected: +protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 - // 实现 protected: HICON m_hIcon; @@ -46,8 +46,11 @@ class CHttpGetDlg : public CDialogEx afx_msg void OnBnClickedReset(); afx_msg void OnBnClickedRadio(); afx_msg void OnBnClickedCheckPost(); + afx_msg void OnBnClickedBrowser(); + afx_msg void OnBnClickedDosOpen(); private: + FILE* m_dosFp; CProgressCtrl m_progress; CString m_url; int m_downType; diff --git a/lib_fiber/samples-gui/HttpGet/resource.h b/lib_fiber/samples-gui/HttpGet/resource.h index 604dd11e3..e3c3da4c2 100644 --- a/lib_fiber/samples-gui/HttpGet/resource.h +++ b/lib_fiber/samples-gui/HttpGet/resource.h @@ -22,6 +22,10 @@ #define IDC_RADIO2 1010 #define IDC_RADIO_THREAD 1010 #define IDC_CHECK_POST 1011 +#define IDC_FILE 1012 +#define IDC_BROWSER 1013 +#define IDC_BUTTON3 1014 +#define IDC_DOS_OPEN 1014 // Next default values for new objects // @@ -29,7 +33,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 130 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1012 +#define _APS_NEXT_CONTROL_VALUE 1015 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif