]> git.tdb.fi Git - libs/net.git/blob - source/server.h
Use maputils.h
[libs/net.git] / source / server.h
1 #ifndef MSP_HTTP_SERVER_H_
2 #define MSP_HTTP_SERVER_H_
3
4 #include <msp/core/refptr.h>
5 #include <msp/io/eventdispatcher.h>
6 #include <msp/net/streamserversocket.h>
7
8 namespace Msp {
9 namespace Http {
10
11 class Request;
12 class Response;
13
14 class Server
15 {
16 public:
17         sigc::signal<void, const Request &, Response &> signal_request;
18
19 private:
20         struct Client
21         {
22                 RefPtr<Net::StreamSocket> sock;
23                 std::string in_buf;
24                 Request *request;
25                 Response *response;
26                 bool async;
27                 bool stale;
28
29                 Client(RefPtr<Net::StreamSocket>);
30                 ~Client();
31         };
32
33         Net::StreamServerSocket sock;
34         std::list<Client> clients;
35         IO::EventDispatcher *event_disp;
36
37 public:
38         Server(unsigned);
39         unsigned get_port() const;
40         void use_event_dispatcher(IO::EventDispatcher *);
41         void delay_response(Response &);
42         void submit_response(Response &);
43 private:
44         void data_available();
45         void client_data_available(Client &);
46         void client_end_of_file(Client &);
47         Client &get_client_by_response(Response &);
48 };
49
50 } // namespace Http
51 } // namespace Msp
52
53 #endif