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