src/proto2/NetworkSession.hh
author terom
Mon, 10 Nov 2008 21:58:38 +0000
branchno-netsession
changeset 34 1ea6554d703e
parent 33 e53f09b378f4
child 36 785d220fc6b7
permissions -rw-r--r--
add even more uncompiled code
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
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     4
#include "NetworkTCP.hh"
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     5
#include "NetworkUDP.hh"
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     6
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     7
#include <map>
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     8
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
     9
/*
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    10
 * Should be set to some 8-char magic value to identify the application
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    11
 */
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    12
typedef char[8] NetworkSessionMagic;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    13
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    14
/*
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    15
 * Used to separate packets, ID zero is reserved for NetworkSession use
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    16
 */
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    17
typedef uint16_t NetworkChannelID;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    18
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    19
class NetworkSession {
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    20
    private:
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    21
        NetworkSessionMagic magic;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    22
        NetworkTCPServer *tcp_srv;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    23
        NetworkUDP *udp_srv, *udp_client;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    24
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    25
        CL_SlotContainer slots;
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    26
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    27
        std::map<NetworkAddress, NetworkNode*> nodes;
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    28
        std::map<NetworkChannelID, CL_Signal_v2<const NetworkPacket&, NetworkNode *>> _map_sig_chan_message;
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    29
    
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    30
    public:
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    31
        NetworkSession (NetworkSessionMagic magic);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    32
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    33
        void listen (const NetworkAddress &addr);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    34
        NetworkNode* connect (const NetworkAddress &addr);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    35
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    36
    private:
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    37
        void on_tcp_client (const NetworkTCPTransport *client);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    38
        void on_disconnect (NetworkNode *node);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    39
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    40
         CL_Signal_v1<NetworkNode*> _sig_node_connected;
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    41
         CL_Signal_v1<NetworkNode*> _sig_node_disconnected;
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    42
33
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    43
    public:
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    44
        void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
e53f09b378f4 more untested, uncompiled code
terom
parents:
diff changeset
    45
        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
    46
34
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    47
        CL_Signal_v1<NetworkNode*> sig_node_connected (void) { return _sig_node_connected; }
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    48
        CL_Signal_v1<NetworkNode*> sig_node_disconnected (void) { return _sig_node_disconnected; }
1ea6554d703e add even more uncompiled code
terom
parents: 33
diff changeset
    49
        CL_Signal_v2<const 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 */