#ifndef MSP_HTTP_SERVER_H_
#define MSP_HTTP_SERVER_H_
-#include <msp/core/refptr.h>
#include <msp/io/eventdispatcher.h>
+#include <msp/net/mspnet_api.h>
#include <msp/net/streamserversocket.h>
+#include <msp/time/timedelta.h>
namespace Msp {
namespace Http {
class Request;
class Response;
-class Server
+class MSPNET_API Server
{
public:
sigc::signal<void, const Request &, Response &> signal_request;
private:
struct Client
{
- RefPtr<Net::StreamSocket> sock;
+ std::unique_ptr<Net::StreamSocket> sock;
std::string in_buf;
- Request *request;
- Response *response;
- bool keepalive;
- bool async;
- bool stale;
-
- Client(RefPtr<Net::StreamSocket>);
- ~Client();
+ std::unique_ptr<Request> request;
+ std::unique_ptr<Response> response;
+ bool keepalive = false;
+ bool async = false;
+ bool stale = false;
+
+ Client(std::unique_ptr<Net::StreamSocket>);
};
Net::StreamServerSocket sock;
std::list<Client> clients;
std::map<Response *, Client *> responses;
- IO::EventDispatcher *event_disp;
+ IO::EventDispatcher *event_disp = nullptr;
public:
+ Server();
Server(unsigned);
~Server();
+ void listen(unsigned);
unsigned get_port() const;
void use_event_dispatcher(IO::EventDispatcher *);
void delay_response(Response &);
void submit_response(Response &);
void cancel_keepalive(Response &);
+ void close_connections(const Time::TimeDelta &);
private:
void data_available();
void client_data_available(Client &);