Start wxWebRequestWinHTTP implementation

Can already run the GET request in the sample app
This commit is contained in:
Tobias Taschner
2018-10-20 19:21:35 +02:00
parent e07c1bf40c
commit a4279752f8
9 changed files with 676 additions and 26 deletions

View File

@@ -18,15 +18,29 @@
#include "wx/object.h"
#include "wx/scopedptr.h"
#include "wx/sharedptr.h"
#include "wx/stream.h"
#include "wx/vector.h"
class wxWebResponse;
class wxWebSession;
WX_DECLARE_STRING_HASH_MAP(wxString, wxWebRequestHeaderMap);
class WXDLLIMPEXP_NET wxWebRequest : public wxEvtHandler, public wxRefCounter
{
public:
virtual void SetHeader(const wxString& name, const wxString& value) = 0;
enum State
{
State_Idle,
State_Active,
State_Ready,
State_Failed
};
virtual ~wxWebRequest() { }
virtual void SetHeader(const wxString& name, const wxString& value)
{ m_headers[name] = value; }
virtual void SetMethod(const wxString& method) = 0;
@@ -34,21 +48,50 @@ public:
virtual void SetData(const wxInputStream& dataStream, const wxString& contentType) = 0;
virtual void SetIgnoreServerErrorStatus(bool ignore) = 0;
void SetIgnoreServerErrorStatus(bool ignore) { m_ignoreServerErrorStatus = ignore; }
virtual void Start() = 0;
virtual void Cancel() = 0;
virtual const wxWebResponse* GetResponse() const = 0;
virtual wxWebResponse* GetResponse() = 0;
int GetId() const { return m_id; }
State GetState() const { return m_state; }
protected:
wxWebRequestHeaderMap m_headers;
wxWebRequest(int id):
m_id(id),
m_state(State_Idle),
m_ignoreServerErrorStatus(false) { }
void SetState(State state, const wxString& failMsg = "");
bool CheckServerStatus();
private:
int m_id;
State m_state;
wxString m_failMessage;
bool m_ignoreServerErrorStatus;
void ProcessReadyEvent();
void ProcessFailedEvent();
wxDECLARE_NO_COPY_CLASS(wxWebRequest);
};
class WXDLLIMPEXP_NET wxWebResponse
{
public:
virtual ~wxWebResponse() { }
virtual wxInt64 GetContentLength() const = 0;
virtual wxString GetURL() const = 0;
virtual wxString GetHeader(const wxString& name) const = 0;
@@ -57,10 +100,13 @@ public:
virtual wxString GetStatusText() const = 0;
virtual wxInputStream& GetStream() const = 0;
virtual wxInputStream* GetStream() const = 0;
virtual wxString AsString(wxMBConv* conv = NULL) const = 0;
protected:
wxWebResponse() { }
private:
wxDECLARE_NO_COPY_CLASS(wxWebResponse);
};
@@ -69,6 +115,8 @@ class WXDLLIMPEXP_NET wxWebSessionFactory
{
public:
virtual wxWebSession* Create() = 0;
virtual ~wxWebSessionFactory() { }
};
WX_DECLARE_STRING_HASH_MAP(wxSharedPtr<wxWebSessionFactory>, wxStringWebSessionFactoryMap);
@@ -85,7 +133,10 @@ public:
virtual wxWebRequest* CreateRequest(const wxString& url, int id = wxID_ANY) = 0;
virtual void SetHeader(const wxString& name, const wxString& value) = 0;
virtual void SetHeader(const wxString& name, const wxString& value)
{ m_headers[name] = value; }
const wxWebRequestHeaderMap& GetHeaders() const { return m_headers; }
static wxWebSession& GetDefault();
@@ -96,9 +147,10 @@ public:
static bool IsBackendAvailable(const wxString& backend);
protected:
wxWebSession() { }
wxWebSession();
private:
wxWebRequestHeaderMap m_headers;
static wxScopedPtr<wxWebSession> ms_defaultSession;
static wxStringWebSessionFactoryMap ms_factoryMap;
@@ -120,6 +172,8 @@ public:
const wxString& GetErrorDescription() const { return m_errorDescription; }
wxEvent* Clone() const wxOVERRIDE { return new wxWebRequestEvent(*this); }
private:
wxWebResponse* m_response;
wxString m_errorDescription;