src/proto2/NetworkObject.hh
author terom
Thu, 20 Nov 2008 20:27:12 +0000
branchno-netsession
changeset 37 ed2957490bbf
parent 36 785d220fc6b7
child 38 4189b8bf3a5b
permissions -rw-r--r--
compile step complete
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
     1
#ifndef NETWORK_OBJECT_HH
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
     2
#define NETWORK_OBJECT_HH
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
     3
36
terom
parents: 34
diff changeset
     4
#include "NetworkSession.hh"
terom
parents: 34
diff changeset
     5
#include "NetworkNode.hh"
terom
parents: 34
diff changeset
     6
#include "Logger.hh"
terom
parents: 34
diff changeset
     7
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
     8
#include <map>
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
     9
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    10
typedef uint32_t NetworkObjectID;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    11
typedef uint16_t NetworkMessageID;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    12
36
terom
parents: 34
diff changeset
    13
// forward-declare
terom
parents: 34
diff changeset
    14
class NetworkObject;
terom
parents: 34
diff changeset
    15
class NetworkObject_Client;
terom
parents: 34
diff changeset
    16
class NetworkObject_Server;
terom
parents: 34
diff changeset
    17
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    18
class NetworkObjectController {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    19
    friend class NetworkObject;
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    20
    friend class NetworkObject_Server;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    21
    friend class NetworkObject_Client;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    22
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    23
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    24
        NetworkSession &session;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    25
        NetworkChannelID channel_id;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    26
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    27
        std::map<NetworkObjectID, NetworkObject*> objects;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    28
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    29
        CL_Slot slot_message;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    30
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    31
    protected:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    32
        NetworkObjectController (NetworkSession &session, NetworkChannelID channel_id);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    33
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    34
    private:
36
terom
parents: 34
diff changeset
    35
        void on_message (NetworkPacket &pkt, NetworkNode *node);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    36
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    37
    protected:
36
terom
parents: 34
diff changeset
    38
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node) = 0; 
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    39
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    40
36
terom
parents: 34
diff changeset
    41
class NetworkObject_ServerController : public NetworkObjectController {
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    42
    friend class NetworkObject_Server;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    43
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    44
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    45
        NetworkObjectID id_pool;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    46
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    47
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    48
        NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    49
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    50
    protected:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    51
        NetworkObjectID getObjectID (void);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    52
36
terom
parents: 34
diff changeset
    53
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    54
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    55
36
terom
parents: 34
diff changeset
    56
class NetworkObject_ClientController : public NetworkObjectController {
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    57
    friend class NetworkObject_Client;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    58
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    59
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    60
        NetworkNode *server;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    61
36
terom
parents: 34
diff changeset
    62
        CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, NetworkPacket&> _sig_create;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    63
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    64
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    65
        NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server);
36
terom
parents: 34
diff changeset
    66
terom
parents: 34
diff changeset
    67
    protected:
terom
parents: 34
diff changeset
    68
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node);
terom
parents: 34
diff changeset
    69
    
terom
parents: 34
diff changeset
    70
    public:  
terom
parents: 34
diff changeset
    71
        CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, NetworkPacket&>& sig_create (void) { return _sig_create; }
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    72
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    73
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    74
class NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    75
    friend class NetworkObjectController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    76
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    77
    protected:
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    78
        NetworkObjectID obj_id;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    79
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    80
    protected:
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    81
        NetworkObject (NetworkObjectController &controller, NetworkObjectID obj_id);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    82
        
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    83
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt) = 0;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    84
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    85
        void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    86
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    87
36
terom
parents: 34
diff changeset
    88
std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
terom
parents: 34
diff changeset
    89
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    90
class NetworkObject_Server : public NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    91
    friend class NetworkObject_ServerController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    92
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    93
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    94
        NetworkObject_ServerController &controller;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    95
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    96
        std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacket&> > _map_sig_message;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    97
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    98
    public:
36
terom
parents: 34
diff changeset
    99
        NetworkObject_Server (NetworkObject_ServerController &controller);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   100
    
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   101
    protected:
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   102
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   103
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   104
    public:
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   105
        void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   106
        void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   107
        void send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable = true);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   108
    
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   109
        CL_Signal_v2<NetworkNode*, NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   110
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   111
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   112
class NetworkObject_Client : public NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   113
    friend class NetworkObject_ClientController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   114
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   115
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   116
        NetworkObject_ClientController &controller;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   117
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   118
        std::map<NetworkMessageID, CL_Signal_v1<NetworkPacket&> > _map_sig_message;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   119
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   120
    protected:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   121
        NetworkObject_Client (NetworkObject_ClientController &controller, NetworkObjectID id);
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   122
        
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   123
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   124
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   125
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   126
        void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   127
        
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   128
        CL_Signal_v1<NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
36
terom
parents: 34
diff changeset
   129
};
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   130
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   131
#endif /* NETWORK_OBJECT_HH */