src/proto2/NetworkTCP.hh
branchno-netsession
changeset 31 d0d7489d4e8b
child 32 2ff929186c90
equal deleted inserted replaced
30:0e6f454ecf0e 31:d0d7489d4e8b
       
     1 #ifndef NETWORK_TCP_HH
       
     2 #define NETWORK_TCP_HH
       
     3 
       
     4 #include "NetworkSocket.hh"
       
     5 #include "NetworkAddress.hh"
       
     6 
       
     7 const size_t NETWORK_TCP_CHUNK_SIZE = 1024;
       
     8 const size_t NETWORK_TCP_INITIAL_IN_BUF = 4096;
       
     9 const size_t NETWORK_TCP_INITIAL_OUT_BUF = 0;
       
    10 
       
    11 class NetworkDisconnectError : public exception {
       
    12 
       
    13 };
       
    14 
       
    15 class NetworkBuffer {
       
    16     private:
       
    17         char *buf;
       
    18         size_t size, off;
       
    19 
       
    20         NetworkSocket &socket;
       
    21 
       
    22     public:
       
    23         NetworkBuffer (NetworkSocket &socket, size_t size_hint);
       
    24     
       
    25     private:
       
    26         void resize (size_t new_size);
       
    27 
       
    28     public:    
       
    29         void write (const char *buf, size_t size);
       
    30         void read (char *buf, size_t size);
       
    31 
       
    32         void flush_write (void);
       
    33 
       
    34         template <typename T> bool read_prefix (T &val_ref);
       
    35 };
       
    36 
       
    37 class NetworkTCPTransport {
       
    38     private:
       
    39         NetworkSocket socket;
       
    40 
       
    41         NetworkBuffer in, out;
       
    42     
       
    43     protected:
       
    44         CL_SlotContainer slots; 
       
    45     
       
    46     public:
       
    47         NetworkTCPTransport (CL_Socket socket);
       
    48 
       
    49     private:
       
    50         void on_read (void);
       
    51         void on_write (void);
       
    52         void on_disconnected (void);
       
    53 
       
    54     protected:
       
    55         void write_packet (const NetworkPacket &packet);
       
    56         
       
    57         virtual void handle_packet (const NetworkPacket &packet) = 0;
       
    58         virtual void handle_disconnect (void) = 0;
       
    59 };
       
    60 
       
    61 class NetworkTCPServer {
       
    62     private:
       
    63         NetworkSocket socket;
       
    64 
       
    65     public:
       
    66         NetworkTCPServer (const NetworkAddress &listen_addr);
       
    67 
       
    68     private:
       
    69         void on_accept (void);
       
    70 
       
    71     protected:
       
    72         virtual void handle_client (NetworkTCPTransport *client) = 0;
       
    73 };
       
    74 
       
    75 class NetworkTCPClient : public NetworkTCPTransport {
       
    76     public:
       
    77         NetworkTCPClient (const NetworkAddress &connect_addr);
       
    78 };
       
    79 
       
    80 #endif /* NETWORK_TCP_HH */