src/proto2/NetworkObject.hh
branchno-netsession
changeset 34 1ea6554d703e
child 36 785d220fc6b7
equal deleted inserted replaced
33:e53f09b378f4 34:1ea6554d703e
       
     1 #ifndef NETWORK_OBJECT_HH
       
     2 #define NETWORK_OBJECT_HH
       
     3 
       
     4 #include <map>
       
     5 
       
     6 typedef uint32_t NetworkObjectID;
       
     7 typedef uint16_t NetworkMessageID;
       
     8 
       
     9 class NetworkObjectController {
       
    10     friend class NetworkObject;
       
    11 
       
    12     private:
       
    13         NetworkSession &session;
       
    14         NetworkChannelID channel_id;
       
    15 
       
    16         std::map<NetworkObjectID, NetworkObject*> objects;
       
    17 
       
    18         CL_Slot slot_message;
       
    19     
       
    20     protected:
       
    21         NetworkObjectController (NetworkSession &session, NetworkChannelID channel_id);
       
    22     
       
    23     private:
       
    24         void on_message (const NetworkPacket &pkt, NetworkNode *node);
       
    25 
       
    26     protected:
       
    27         virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *node) = 0; 
       
    28 };
       
    29 
       
    30 class NetworkObject_ServerController : NetworkObjectController {
       
    31     friend class NetworkObject_Server;
       
    32 
       
    33     private:
       
    34         NetworkObjectID id_pool;
       
    35     
       
    36     public:
       
    37         NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
       
    38 
       
    39     protected:
       
    40         NetworkObjectID getObjectId (void);
       
    41 
       
    42         virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *node);
       
    43 };
       
    44 
       
    45 class NetworkObject_ClientController : NetworkObjectController {
       
    46     friend class NetworkObject_Client;
       
    47 
       
    48     private:
       
    49         NetworkNode *server;
       
    50 
       
    51         CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, const NetworkPacket&> _sig_create;
       
    52     
       
    53     protected:
       
    54         virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *node);
       
    55 
       
    56     public:
       
    57         NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server);
       
    58         
       
    59         CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, const NetworkPacket&>& sig_create (void) { return _sig_create; }
       
    60 };
       
    61 
       
    62 class NetworkObject {
       
    63     friend class NetworkObjectController;
       
    64 
       
    65     private:
       
    66         NetworkObjectID obj_id;
       
    67 
       
    68         std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, const NetworkPacket&>> _map_sig_message;
       
    69         
       
    70     protected:
       
    71         NetworkObject (NetworkObjectID obj_id, NetworkObjectController &controller);
       
    72 
       
    73         void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
       
    74 
       
    75     public:
       
    76         CL_Signal_v2<NetworkNode*, const NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
       
    77 };
       
    78 
       
    79 class NetworkObject_Server : public NetworkObject {
       
    80     friend class NetworkObject_ServerController;
       
    81 
       
    82     private:
       
    83         NetworkObject_ServerController &controller;
       
    84 
       
    85     public:
       
    86         NetworkObject_Server (NetworkObjectController &controller);
       
    87 
       
    88         void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
       
    89         void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
       
    90         void send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable = true);
       
    91 };
       
    92 
       
    93 class NetworkObject_Client : public NetworkObject {
       
    94     friend class NetworkObject_ClientController;
       
    95 
       
    96     private:
       
    97         NetworkObject_ClientController &controller;
       
    98 
       
    99     protected:
       
   100         NetworkObject_Client (NetworkObject_ClientController &controller, NetworkNode *server, NetworkObjectID id);
       
   101 
       
   102     public:
       
   103         void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
       
   104 }
       
   105 
       
   106 #endif /* NETWORK_OBJECT_HH */