src/proto2/NetworkObject.hh
branchno-netsession
changeset 37 ed2957490bbf
parent 36 785d220fc6b7
child 38 4189b8bf3a5b
equal deleted inserted replaced
36:785d220fc6b7 37:ed2957490bbf
    15 class NetworkObject_Client;
    15 class NetworkObject_Client;
    16 class NetworkObject_Server;
    16 class NetworkObject_Server;
    17 
    17 
    18 class NetworkObjectController {
    18 class NetworkObjectController {
    19     friend class NetworkObject;
    19     friend class NetworkObject;
       
    20     friend class NetworkObject_Server;
       
    21     friend class NetworkObject_Client;
    20 
    22 
    21     private:
    23     private:
    22         NetworkSession &session;
    24         NetworkSession &session;
    23         NetworkChannelID channel_id;
    25         NetworkChannelID channel_id;
    24 
    26 
    44     
    46     
    45     public:
    47     public:
    46         NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
    48         NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
    47 
    49 
    48     protected:
    50     protected:
    49         NetworkObjectID getObjectId (void);
    51         NetworkObjectID getObjectID (void);
    50 
    52 
    51         virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node);
    53         virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node);
    52 };
    54 };
    53 
    55 
    54 class NetworkObject_ClientController : public NetworkObjectController {
    56 class NetworkObject_ClientController : public NetworkObjectController {
    70 };
    72 };
    71 
    73 
    72 class NetworkObject {
    74 class NetworkObject {
    73     friend class NetworkObjectController;
    75     friend class NetworkObjectController;
    74 
    76 
    75     private:
    77     protected:
    76         NetworkObjectID obj_id;
    78         NetworkObjectID obj_id;
    77 
    79 
    78         std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacket&> > _map_sig_message;
    80     protected:
       
    81         NetworkObject (NetworkObjectController &controller, NetworkObjectID obj_id);
    79         
    82         
    80     protected:
    83         virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt) = 0;
    81         NetworkObject (NetworkObjectID obj_id, NetworkObjectController &controller);
       
    82 
    84 
    83         void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
    85         void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
    84 
       
    85     public:
       
    86         CL_Signal_v2<NetworkNode*, NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
       
    87 };
    86 };
    88 
    87 
    89 std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
    88 std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
    90 
    89 
    91 class NetworkObject_Server : public NetworkObject {
    90 class NetworkObject_Server : public NetworkObject {
    92     friend class NetworkObject_ServerController;
    91     friend class NetworkObject_ServerController;
    93 
    92 
    94     private:
    93     private:
    95         NetworkObject_ServerController &controller;
    94         NetworkObject_ServerController &controller;
    96 
    95 
       
    96         std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacket&> > _map_sig_message;
       
    97 
    97     public:
    98     public:
    98         NetworkObject_Server (NetworkObject_ServerController &controller);
    99         NetworkObject_Server (NetworkObject_ServerController &controller);
       
   100     
       
   101     protected:
       
   102         virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
    99 
   103 
       
   104     public:
   100         void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
   105         void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
   101         void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
   106         void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
   102         void send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable = true);
   107         void send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable = true);
       
   108     
       
   109         CL_Signal_v2<NetworkNode*, NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
   103 };
   110 };
   104 
   111 
   105 class NetworkObject_Client : public NetworkObject {
   112 class NetworkObject_Client : public NetworkObject {
   106     friend class NetworkObject_ClientController;
   113     friend class NetworkObject_ClientController;
   107 
   114 
   108     private:
   115     private:
   109         NetworkObject_ClientController &controller;
   116         NetworkObject_ClientController &controller;
   110 
   117 
       
   118         std::map<NetworkMessageID, CL_Signal_v1<NetworkPacket&> > _map_sig_message;
       
   119 
   111     protected:
   120     protected:
   112         NetworkObject_Client (NetworkObject_ClientController &controller, NetworkNode *server, NetworkObjectID id);
   121         NetworkObject_Client (NetworkObject_ClientController &controller, NetworkObjectID id);
       
   122         
       
   123         virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
   113 
   124 
   114     public:
   125     public:
   115         void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
   126         void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
       
   127         
       
   128         CL_Signal_v1<NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
   116 };
   129 };
   117 
   130 
   118 #endif /* NETWORK_OBJECT_HH */
   131 #endif /* NETWORK_OBJECT_HH */