src/proto2/NetworkSession.hh
author terom
Thu, 20 Nov 2008 19:25:56 +0000
branchno-netsession
changeset 36 785d220fc6b7
parent 34 1ea6554d703e
child 37 ed2957490bbf
permissions -rw-r--r--
...
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     1
#ifndef NETWORK_SESSION_HH
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     2
#define NETWORK_SESSION_HH
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     3
36
terom
parents: 34
diff changeset
     4
// forward-declare
terom
parents: 34
diff changeset
     5
class NetworkSession;
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     6
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     7
/*
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     8
 * Used to separate packets, ID zero is reserved for NetworkSession use
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     9
 */
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    10
typedef uint16_t NetworkChannelID;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    11
36
terom
parents: 34
diff changeset
    12
#include "NetworkTCP.hh"
terom
parents: 34
diff changeset
    13
#include "NetworkUDP.hh"
terom
parents: 34
diff changeset
    14
#include "NetworkNode.hh"
terom
parents: 34
diff changeset
    15
terom
parents: 34
diff changeset
    16
#include <map>
terom
parents: 34
diff changeset
    17
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    18
class NetworkSession {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    19
    private:
36
terom
parents: 34
diff changeset
    20
        uint64_t magic;
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    21
        NetworkTCPServer *tcp_srv;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    22
        NetworkUDP *udp_srv, *udp_client;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    23
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    24
        CL_SlotContainer slots;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    25
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    26
        std::map<NetworkAddress, NetworkNode*> nodes;
36
terom
parents: 34
diff changeset
    27
        std::map<NetworkChannelID, CL_Signal_v2<NetworkPacket&, NetworkNode *> > _map_sig_chan_message;
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    28
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    29
    public:
36
terom
parents: 34
diff changeset
    30
        NetworkSession (uint64_t magic);
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    31
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    32
        void listen (const NetworkAddress &addr);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    33
        NetworkNode* connect (const NetworkAddress &addr);
36
terom
parents: 34
diff changeset
    34
    
terom
parents: 34
diff changeset
    35
    protected:
terom
parents: 34
diff changeset
    36
        virtual NetworkNode *build_node (NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &addr, enum NetworkNodeType type);
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    37
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    38
    private:
36
terom
parents: 34
diff changeset
    39
        void on_tcp_client (NetworkTCPTransport *client);
terom
parents: 34
diff changeset
    40
        void handle_disconnect (NetworkNode *node);
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    41
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    42
         CL_Signal_v1<NetworkNode*> _sig_node_connected;
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    43
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    44
    public:
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    45
        void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    46
        void send_all_except (NetworkChannelID channel_id, const NetworkPacket &pkt, const NetworkNode *node, bool reliable = true);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    47
36
terom
parents: 34
diff changeset
    48
        CL_Signal_v1<NetworkNode*>& sig_node_connected (void) { return _sig_node_connected; }
terom
parents: 34
diff changeset
    49
        CL_Signal_v2<NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    50
};
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    51
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    52
#endif /* NETWORK_SESSION_HH */