barrier/server/CHTTPServer.h

102 lines
2.5 KiB
C++

#ifndef CHTTPSERVER_H
#define CHTTPSERVER_H
#include "BasicTypes.h"
#include "CString.h"
#include <vector>
class CServer;
class CScreenMap;
class CHTTPRequest;
class CHTTPReply;
class ISocket;
class CHTTPServer {
public:
CHTTPServer(CServer*);
virtual ~CHTTPServer();
// manipulators
// synchronously process an HTTP request on the given socket
void processRequest(ISocket*);
// accessors
protected:
virtual void doProcessRequest(CHTTPRequest&, CHTTPReply&);
virtual void doProcessGetEditMap(CHTTPRequest&, CHTTPReply&);
virtual void doProcessPostEditMap(CHTTPRequest&, CHTTPReply&);
static bool parseXY(const CString&, SInt32& x, SInt32& y);
class CScreenArray {
public:
CScreenArray();
~CScreenArray();
// resize the array. this also clears all the elements.
void resize(SInt32 w, SInt32 h);
// insert/remove a row/column. all elements in a new row/column
// are unset.
void insertRow(SInt32 insertedBeforeRow);
void insertColumn(SInt32 insertedBeforeColumn);
void eraseRow(SInt32 row);
void eraseColumn(SInt32 column);
// rotate rows or columns
void rotateRows(SInt32 rowsDown);
void rotateColumns(SInt32 columnsDown);
// remove/set a screen name. setting an empty name is the
// same as removing a name. names are not checked for
// validity.
void remove(SInt32 x, SInt32 y);
void set(SInt32 x, SInt32 y, const CString&);
// convert a CScreenMap to a CScreenArray. returns true iff
// all connections are symmetric and therefore exactly
// representable by a CScreenArray.
bool convertFrom(const CScreenMap&);
// accessors
// get the array size
SInt32 getWidth() const { return m_w; }
SInt32 getHeight() const { return m_h; }
// returns true iff the cell has a 4-connected neighbor
bool isAllowed(SInt32 x, SInt32 y) const;
// returns true iff the cell has a (non-empty) name
bool isSet(SInt32 x, SInt32 y) const;
// get a screen name
CString get(SInt32 x, SInt32 y) const;
// find a screen by name. returns true iff found.
bool find(const CString&, SInt32& x, SInt32& y) const;
// return true iff the overall array is valid. that means
// just zero or one screen or all screens are 4-connected
// to other screens.
bool isValid() const;
// convert this to a CScreenMap
void convertTo(CScreenMap&) const;
private:
typedef std::vector<CString> CNames;
SInt32 m_w, m_h;
CNames m_screens;
};
private:
CServer* m_server;
};
#endif