src/proto2/NetworkTCP.hh
author terom
Thu, 20 Nov 2008 20:27:12 +0000
branchno-netsession
changeset 37 ed2957490bbf
parent 36 785d220fc6b7
child 38 4189b8bf3a5b
permissions -rw-r--r--
compile step complete
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
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
     4
#include <ClanLib/core.h>
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
     5
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     6
#include "NetworkSocket.hh"
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
     7
#include "NetworkAddress.hh"
36
terom
parents: 34
diff changeset
     8
#include "NetworkPacket.hh"
terom
parents: 34
diff changeset
     9
#include "Error.hh"
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    10
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    11
const size_t NETWORK_TCP_CHUNK_SIZE = 1024;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    12
const size_t NETWORK_TCP_INITIAL_IN_BUF = 4096;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    13
const size_t NETWORK_TCP_INITIAL_OUT_BUF = 0;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    14
36
terom
parents: 34
diff changeset
    15
class NetworkDisconnectError : public Error {
terom
parents: 34
diff changeset
    16
    public:
terom
parents: 34
diff changeset
    17
        NetworkDisconnectError (const std::string &message) : Error(message) { }
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    18
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    19
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    20
class NetworkBufferError : public Error {
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    21
    public:
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    22
        NetworkBufferError (const std::string &message) : Error(message) { }
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    23
};
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    24
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    25
class NetworkBuffer {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    26
    private:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    27
        NetworkSocket &socket;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    28
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    29
        char *buf;
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    30
        size_t size, offset;
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    31
    
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    32
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    33
        NetworkBuffer (NetworkSocket &socket, size_t size_hint);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    34
        ~NetworkBuffer (void);
36
terom
parents: 34
diff changeset
    35
    
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    36
    private:
36
terom
parents: 34
diff changeset
    37
        NetworkBuffer (const NetworkBuffer &copy);
terom
parents: 34
diff changeset
    38
        NetworkBuffer& operator= (const NetworkBuffer &copy);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    39
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    40
        void resize (size_t item_size);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    41
        void trim (size_t prefix_size);
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
    public:    
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    44
        void push_write (char *buf_ptr, size_t buf_size);
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    45
        void flush_write (void);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    46
        template <typename PrefixType> void write_prefix (char *buf, PrefixType prefix);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    47
        
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    48
        bool try_read (size_t item_size);
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    49
        bool peek_prefix (uint16_t &ref);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    50
        bool peek_prefix (uint32_t &ref);
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    51
        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
    52
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    53
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    54
class NetworkTCPTransport {
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    55
    protected:
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    56
        NetworkSocket socket;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    57
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    58
        NetworkBuffer in, out;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    59
    
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    60
        CL_SlotContainer slots; 
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    61
    
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    62
    public:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    63
        NetworkTCPTransport (NetworkSocket socket);
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    64
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    65
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    66
        void on_read (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    67
        void on_write (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    68
        void on_disconnected (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    69
36
terom
parents: 34
diff changeset
    70
        CL_Signal_v1<const NetworkPacket &> _sig_packet;
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    71
        CL_Signal_v0 _sig_disconnect;
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    72
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    73
    public:
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    74
        NetworkAddress getRemoteAddress (void) { return socket.get_dest_address(); }
33
e53f09b378f4 more untested, uncompiled code
terom
parents: 32
diff changeset
    75
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    76
        void write_packet (const NetworkPacket &packet);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    77
        
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    78
        CL_Signal_v1<const NetworkPacket&>& sig_packet (void) { return _sig_packet; }
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    79
        CL_Signal_v0& sig_disconnect (void) { return _sig_disconnect; }
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 NetworkTCPServer {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    83
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    84
        NetworkSocket socket;
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    85
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    86
        CL_SlotContainer slots; 
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    87
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    88
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    89
        NetworkTCPServer (const NetworkAddress &listen_addr);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    90
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    91
    private:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    92
        void on_accept (void);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
    93
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    94
        CL_Signal_v1<NetworkTCPTransport *> _sig_client;
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    95
33
e53f09b378f4 more untested, uncompiled code
terom
parents: 32
diff changeset
    96
    protected:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    97
        virtual NetworkTCPTransport* buildTransport (CL_Socket &socket);
33
e53f09b378f4 more untested, uncompiled code
terom
parents: 32
diff changeset
    98
32
2ff929186c90 write some mode code...
terom
parents: 31
diff changeset
    99
    public:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   100
        CL_Signal_v1<NetworkTCPTransport *>& sig_client (void) { return _sig_client; }
31
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   101
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   102
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   103
class NetworkTCPClient : public NetworkTCPTransport {
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   104
    public:
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   105
        NetworkTCPClient (const NetworkAddress &connect_addr);
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   106
};
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   107
d0d7489d4e8b add initial code written so far
terom
parents:
diff changeset
   108
#endif /* NETWORK_TCP_HH */