src/proto2/NetworkObject.hh
author terom
Thu, 20 Nov 2008 22:10:28 +0000
branchno-netsession
changeset 38 4189b8bf3a5b
parent 37 ed2957490bbf
permissions -rw-r--r--
kind of works
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;
38
4189b8bf3a5b kind of works
terom
parents: 37
diff changeset
    76
    friend std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    77
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    78
    protected:
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    79
        NetworkObjectID obj_id;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    80
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    81
    protected:
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    82
        NetworkObject (NetworkObjectController &controller, NetworkObjectID obj_id);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    83
        
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    84
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt) = 0;
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    85
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    86
        void buildPacket (NetworkPacket &pkt, NetworkMessageID msg_id, const NetworkPacket &payload);
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
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    97
        std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacket&> > _map_sig_message;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
    98
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
    99
    public:
36
terom
parents: 34
diff changeset
   100
        NetworkObject_Server (NetworkObject_ServerController &controller);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   101
    
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   102
    protected:
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   103
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   104
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   105
    public:
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   106
        void send_to (NetworkNode *dst, NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   107
        void send_all (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   108
        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
   109
    
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   110
        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
   111
};
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   112
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   113
class NetworkObject_Client : public NetworkObject {
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   114
    friend class NetworkObject_ClientController;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   115
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   116
    private:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   117
        NetworkObject_ClientController &controller;
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   118
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   119
        std::map<NetworkMessageID, CL_Signal_v1<NetworkPacket&> > _map_sig_message;
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   120
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   121
    protected:
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   122
        NetworkObject_Client (NetworkObject_ClientController &controller, NetworkObjectID id);
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   123
        
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   124
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacket &pkt);
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   125
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   126
    public:
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   127
        void send (NetworkMessageID msg_id, const NetworkPacket &pkt, bool reliable = true);
37
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   128
        
ed2957490bbf compile step complete
terom
parents: 36
diff changeset
   129
        CL_Signal_v1<NetworkPacket&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
36
terom
parents: 34
diff changeset
   130
};
34
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   131
1ea6554d703e add even more uncompiled code
terom
parents:
diff changeset
   132
#endif /* NETWORK_OBJECT_HH */