src/proto2/NetworkSession.hh
author saiam
Fri, 28 Nov 2008 22:26:23 +0000
changeset 128 890ac82cdcc0
parent 121 0d34c0dce83c
permissions -rw-r--r--
Documenting more, cleaning variables. This code needs some serious
rewriting. (And we havent too many features either)
89
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     1
#ifndef NETWORK_SESSION_HH
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     2
#define NETWORK_SESSION_HH
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     3
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     4
#include <map>
121
0d34c0dce83c Toimiskohan nyt
saiam
parents: 120
diff changeset
     5
#include <stdint.h>
89
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     6
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     7
// forward-declare
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     8
class NetworkSession;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
     9
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    10
/*
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    11
 * Used to separate packets, ID zero is reserved for NetworkSession use
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    12
 */
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    13
typedef uint16_t NetworkChannelID;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    14
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    15
#include "NetworkTCP.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    16
#include "NetworkUDP.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    17
#include "NetworkNode.hh"
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    18
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    19
class NetworkSession {
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    20
    friend class NetworkNode;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    21
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    22
    private:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    23
        uint64_t magic;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    24
        NetworkTCPServer *tcp_srv;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    25
        NetworkUDP *udp_srv, *udp_client;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    26
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    27
        CL_SlotContainer slots;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    28
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    29
        std::map<NetworkAddress, NetworkNode*> nodes;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    30
        std::map<NetworkChannelID, CL_Signal_v2<NetworkPacket&, NetworkNode *> > _map_sig_chan_message;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    31
    
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    32
    public:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    33
        NetworkSession (uint64_t magic);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    34
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    35
        void listen (const NetworkAddress &addr);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    36
        NetworkNode* connect (const NetworkAddress &addr);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    37
    
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    38
    protected:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    39
        virtual NetworkNode *build_node (NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &addr, enum NetworkNodeType type);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    40
        
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    41
        void handle_disconnect (NetworkNode *node);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    42
        void handle_message (NetworkPacket &pkt, NetworkNode *node);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    43
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    44
    private:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    45
        void on_tcp_client (NetworkTCPTransport *client);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    46
        void on_udp_packet (NetworkPacket &pkt, const NetworkAddress &addr);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    47
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    48
        CL_Signal_v1<NetworkNode*> _sig_node_connected;
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    49
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    50
    public:
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    51
        void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    52
        void send_all_except (NetworkChannelID channel_id, const NetworkPacket &pkt, const NetworkNode *node, bool reliable = true);
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    53
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    54
        CL_Signal_v1<NetworkNode*>& sig_node_connected (void) { return _sig_node_connected; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    55
        CL_Signal_v2<NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    56
};
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    57
825c4613e087 merge branches/no-netsession@89 into trunk
terom
parents:
diff changeset
    58
#endif /* NETWORK_SESSION_HH */