src/proto2/NetworkObject.hh
author terom
Thu, 20 Nov 2008 19:25:56 +0000
branchno-netsession
changeset 36 785d220fc6b7
parent 34 1ea6554d703e
child 37 ed2957490bbf
permissions -rw-r--r--
...
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;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    20
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    21
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    22
        NetworkSession &session;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    23
        NetworkChannelID channel_id;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    24
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    25
        std::map<NetworkObjectID, NetworkObject*> objects;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    26
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    27
        CL_Slot slot_message;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    28
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    29
    protected:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    30
        NetworkObjectController (NetworkSession &session, NetworkChannelID channel_id);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    31
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    32
    private:
36
terom
parents: 34
diff changeset
    33
        void on_message (NetworkPacket &pkt, NetworkNode *node);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    35
    protected:
36
terom
parents: 34
diff changeset
    36
        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
    37
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    38
36
terom
parents: 34
diff changeset
    39
class NetworkObject_ServerController : public NetworkObjectController {
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    40
    friend class NetworkObject_Server;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    41
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    42
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    43
        NetworkObjectID id_pool;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    44
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    45
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    46
        NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    47
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    48
    protected:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    49
        NetworkObjectID getObjectId (void);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    50
36
terom
parents: 34
diff changeset
    51
        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
    52
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    53
36
terom
parents: 34
diff changeset
    54
class NetworkObject_ClientController : public NetworkObjectController {
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    55
    friend class NetworkObject_Client;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    56
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    57
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    58
        NetworkNode *server;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    59
36
terom
parents: 34
diff changeset
    60
        CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, NetworkPacket&> _sig_create;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    61
    
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    62
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    63
        NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode *server);
36
terom
parents: 34
diff changeset
    64
terom
parents: 34
diff changeset
    65
    protected:
terom
parents: 34
diff changeset
    66
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacket &pkt, NetworkNode *node);
terom
parents: 34
diff changeset
    67
    
terom
parents: 34
diff changeset
    68
    public:  
terom
parents: 34
diff changeset
    69
        CL_Signal_v3<NetworkObject_Client*, NetworkMessageID, NetworkPacket&>& sig_create (void) { return _sig_create; }
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    70
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    71
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    72
class NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    73
    friend class NetworkObjectController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    74
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    75
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    76
        NetworkObjectID obj_id;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    77
36
terom
parents: 34
diff changeset
    78
        std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacket&> > _map_sig_message;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    79
        
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    80
    protected:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    81
        NetworkObject (NetworkObjectID obj_id, NetworkObjectController &controller);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    82
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    83
        void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    84
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    85
    public:
36
terom
parents: 34
diff changeset
    86
        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
    87
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    88
36
terom
parents: 34
diff changeset
    89
std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
terom
parents: 34
diff changeset
    90
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    91
class NetworkObject_Server : public NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    92
    friend class NetworkObject_ServerController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    93
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    94
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    95
        NetworkObject_ServerController &controller;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    96
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    97
    public:
36
terom
parents: 34
diff changeset
    98
        NetworkObject_Server (NetworkObject_ServerController &controller);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    99
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   100
        void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   101
        void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   102
        void send_all_except (NetworkMessageID msg_id, const NetworkPacket &pkt, NetworkNode *black_sheep, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   103
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   104
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   105
class NetworkObject_Client : public NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   106
    friend class NetworkObject_ClientController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   107
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   108
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   109
        NetworkObject_ClientController &controller;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   110
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   111
    protected:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   112
        NetworkObject_Client (NetworkObject_ClientController &controller, NetworkNode *server, NetworkObjectID id);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   113
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   114
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   115
        void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
36
terom
parents: 34
diff changeset
   116
};
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   117
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   118
#endif /* NETWORK_OBJECT_HH */