#ifndef __BACKEND_H__
#define __BACKEND_H__
#include "ratelimiter.h"
class CBackend : public CRateLimiterObject
{
public:
CBackend(wxEvtHandler* pEvtHandler);
virtual ~CBackend() {}
virtual void Read(void *data, unsigned int len) = 0;
virtual void Write(const void *data, unsigned int len) = 0;
virtual bool Error() const = 0;
virtual int LastError() const = 0;
virtual unsigned int LastCount() const = 0;
virtual void Peek(void *buffer, unsigned int len) = 0;
virtual void OnRateAvailable(enum CRateLimiter::rate_direction direction) = 0;
int GetId() const { return m_Id; }
protected:
wxEvtHandler* const m_pEvtHandler;
private:
int m_Id;
// Initialized with 0, incremented each time
// a new instance is created
// Mainly needed for CHttpControlSockets if server sends a redirects.
// Otherwise, lingering events from the previous connection will cause
// problems
static int m_nextId;
};
class CSocketBackend : public CBackend
{
public:
CSocketBackend(wxEvtHandler* pEvtHandler, wxSocketBase* pSocket);
virtual ~CSocketBackend();
// Backend definitions
virtual void Read(void *buffer, unsigned int len);
virtual void Write(const void *buffer, unsigned int len);
virtual bool Error() const { return m_error; }
virtual unsigned int LastCount() const { return m_lastCount; }
virtual int LastError() const { return m_lastError; }
virtual void Peek(void *buffer, unsigned int len);
protected:
virtual void OnRateAvailable(enum CRateLimiter::rate_direction direction);
void UpdateResults();
wxSocketBase* m_pSocket;
bool m_error;
int m_lastCount;
int m_lastError;
};
#endif //__BACKEND_H__
syntax highlighted by Code2HTML, v. 0.9.1