src/proto2/NetworkTCP.hh
author terom
Mon, 10 Nov 2008 18:21:23 +0000
branchno-netsession
changeset 32 2ff929186c90
parent 31 d0d7489d4e8b
child 33 e53f09b378f4
permissions -rw-r--r--
write some mode code...
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     1
#ifndef NETWORK_TCP_HH
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     2
#define NETWORK_TCP_HH
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     3
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     4
#include "NetworkSocket.hh"
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     5
#include "NetworkAddress.hh"
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     6
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     7
const size_t NETWORK_TCP_CHUNK_SIZE = 1024;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     8
const size_t NETWORK_TCP_INITIAL_IN_BUF = 4096;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     9
const size_t NETWORK_TCP_INITIAL_OUT_BUF = 0;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    10
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    11
class NetworkDisconnectError : public exception {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    12
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    13
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    14
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    15
class NetworkBuffer {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    16
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    17
        char *buf;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    18
        size_t size, off;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    19
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    20
        NetworkSocket &socket;
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    21
    
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    22
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    23
        NetworkBuffer (NetworkSocket &socket, size_t size_hint);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    24
 
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    25
    private:
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    26
        NetworkBuffer (const NetworkBuffer &copy) { };
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    27
        ~NetworkBuffer (void);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    28
        NetworkBuffer& operator= (const NetworkBuffer &copy) { };
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    29
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    30
        void resize (size_t suffix_size);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    31
        void trim (size_t prefix_size);
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    32
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    33
    public:    
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    34
        void push_write (char *buf_ptr, size_t buf_size);
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    35
        void flush_write (void);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    36
        template <typename PrefixType> void write_prefix (char *buf, PrefixType prefix);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    37
        
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    38
        void try_read (size_t item_size);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    39
        bool peek_prefix (uint16_t &ref);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    40
        bool peek_prefix (uint32_t &ref);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    41
        template <typename PrefixType> PrefixType read_prefix (char *buf_ptr, size_t buf_max);
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    42
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    43
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    44
class NetworkTCPTransport {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    45
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    46
        NetworkSocket socket;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    47
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    48
        NetworkBuffer in, out;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    49
    
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    50
    protected:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    51
        CL_SlotContainer slots; 
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    52
    
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    53
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    54
        NetworkTCPTransport (CL_Socket socket);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    55
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    56
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    57
        void on_read (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    58
        void on_write (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    59
        void on_disconnected (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    60
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    61
    public:
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    62
        void write_packet (const NetworkPacket &packet);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    63
        
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    64
        CL_Signal_v1<const NetworkPacket&> sig_packet;
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    65
        CL_Signal_v0 sig_disconnect;
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    66
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    67
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    68
class NetworkTCPServer {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    69
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    70
        NetworkSocket socket;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    71
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    72
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    73
        NetworkTCPServer (const NetworkAddress &listen_addr);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    74
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    75
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    76
        void on_accept (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    77
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    78
    public:
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    79
        CL_Signal_v1<NetworkTCPTransport *> sig_client;
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    80
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    81
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    82
class NetworkTCPClient : public NetworkTCPTransport {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    83
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    84
        NetworkTCPClient (const NetworkAddress &connect_addr);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    85
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    86
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    87
#endif /* NETWORK_TCP_HH */