src/proto2/NetworkSession.hh
changeset 185 25becd2cb026
parent 184 561892e2a30e
child 186 0738f2949a2b
equal deleted inserted replaced
184:561892e2a30e 185:25becd2cb026
     1 #ifndef NETWORK_SESSION_HH
       
     2 #define NETWORK_SESSION_HH
       
     3 
       
     4 #include <map>
       
     5 #include <stdint.h>
       
     6 
       
     7 // forward-declare
       
     8 class NetworkSession;
       
     9 
       
    10 /*
       
    11  * Used to separate packets, ID zero is reserved for NetworkSession use
       
    12  */
       
    13 typedef uint16_t NetworkChannelID;
       
    14 
       
    15 #include "NetworkTCP.hh"
       
    16 #include "NetworkUDP.hh"
       
    17 #include "NetworkNode.hh"
       
    18 
       
    19 class NetworkSession {
       
    20     friend class NetworkNode;
       
    21 
       
    22     private:
       
    23         uint64_t magic;
       
    24         NetworkTCPServer *tcp_srv;
       
    25         NetworkUDP *udp_srv, *udp_client;
       
    26 
       
    27         CL_SlotContainer slots;
       
    28 
       
    29         std::map<NetworkAddress, NetworkNode*> nodes;
       
    30         std::map<NetworkChannelID, CL_Signal_v2<NetworkPacket&, NetworkNode *> > _map_sig_chan_message;
       
    31     
       
    32     public:
       
    33         NetworkSession (uint64_t magic);
       
    34 
       
    35         void listen (const NetworkAddress &addr);
       
    36         NetworkNode* connect (const NetworkAddress &addr);
       
    37     
       
    38     protected:
       
    39         virtual NetworkNode *build_node (NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &addr, enum NetworkNodeType type);
       
    40         
       
    41         void handle_disconnect (NetworkNode *node);
       
    42         void handle_message (NetworkPacket &pkt, NetworkNode *node);
       
    43 
       
    44     private:
       
    45         void on_tcp_client (NetworkTCPTransport *client);
       
    46         void on_udp_packet (NetworkPacket &pkt, const NetworkAddress &addr);
       
    47 
       
    48         CL_Signal_v1<NetworkNode*> _sig_node_connected;
       
    49 
       
    50     public:
       
    51         void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
       
    52         void send_all_except (NetworkChannelID channel_id, const NetworkPacket &pkt, const NetworkNode *node, bool reliable = true);
       
    53 
       
    54         CL_Signal_v1<NetworkNode*>& sig_node_connected (void) { return _sig_node_connected; }
       
    55         CL_Signal_v2<NetworkPacket&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
       
    56 };
       
    57 
       
    58 #endif /* NETWORK_SESSION_HH */