src/Network/Object.hh
author nireco
Sat, 31 Jan 2009 12:33:08 +0200
changeset 443 5d1119729f58
parent 434 a8ba81432ddd
permissions -rw-r--r--
worm02 two pics to comment
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     1
#ifndef NETWORK_OBJECT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     2
#define NETWORK_OBJECT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     3
400
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     4
/**
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     5
 * @file
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     6
 *
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     7
 * Object-based network protocol for use with NetworkSession
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     8
 */
d64bf28c4340 more documentation tweaking, all Network/ files now have a @file comment. Fix Platform.h -> Platform.hh, and Buffer.hh + Packet.cc
Tero Marttila <terom@fixme.fi>
parents: 337
diff changeset
     9
186
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    10
#include "Session.hh"
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    11
#include "Node.hh"
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    12
#include "../Logger.hh"
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    13
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    14
#include <map>
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    15
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    16
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    17
 * A NetworkObject's ID is a 32-bit integer
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    18
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    19
typedef uint32_t NetworkObjectID;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    20
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    21
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    22
 * A NetworkObject's message type is a 16-bit integer
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    23
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    24
typedef uint16_t NetworkMessageID;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    25
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    26
// forward-declare
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    27
class NetworkObject;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    28
class NetworkObject_Client;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    29
class NetworkObject_Server;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    30
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    31
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    32
 * A NetworkObjectController contains a mapping of NetworkObjectID -> NetworkObject, and handles the
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    33
 * messages received on our channel from the NetworkSession.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    34
 *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    35
 * Additionally, this provides methods to read/write NetworkObject references from/to a NetworkPacket
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    36
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    37
class NetworkObjectController {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    38
    friend class NetworkObject;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    39
    friend class NetworkObject_Server;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    40
    friend class NetworkObject_Client;
431
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
    41
    
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
    42
    // XXX: needs to access session and channel_id
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
    43
    friend class NetworkMessage;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    44
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    45
    private:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    46
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    47
         * The NetworkSession that we use
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    48
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    49
        NetworkSession &session;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    50
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    51
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    52
         * The NetworkChannelID that we use to communicate
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    53
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    54
        NetworkChannelID channel_id;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    55
        
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    56
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    57
         * Our map of NetworkObjectID -> NetworkObject
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    58
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    59
        std::map<NetworkObjectID, NetworkObject*> objects;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    60
        
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    61
        CL_Slot slot_message;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    62
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    63
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    64
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    65
         * Construct a NetworkObjectController to use the given NetworkSession and NetworkChannelID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    66
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    67
        NetworkObjectController (NetworkSession &session, NetworkChannelID channel_id);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    68
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    69
    private:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    70
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    71
         * Our NetworkSession::sig_chan_message handler
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    72
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    73
         * Reads the NetworkObjectID and NetworkMessageID from the packet, and then either calls handle_create or
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    74
         * NetworkObject::handle_packet.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    75
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
    76
        void on_message (NetworkPacketInput &pkt, NetworkNode *node);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    77
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    78
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    79
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    80
         * Abstract method called by on_message if we recieve a message for an unknown NetworkObjectID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    81
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    82
         * @param obj_id the unknown NetworkObjectID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    83
         * @param msg_id the packet's NetworkMessageID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    84
         * @param pkt the packet itself, with the header read
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    85
         * @param node the node that we got this packet from
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
    86
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
    87
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacketInput &pkt, NetworkNode *node) = 0; 
276
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 223
diff changeset
    88
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 223
diff changeset
    89
    public:
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 223
diff changeset
    90
        /**
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 290
diff changeset
    91
         * Read an NetworkObjectID from the given packet, and return the corresponding NetworkObject, or NULL if:
51d644c8d5a2 fix player-pivoted rope
terom
parents: 290
diff changeset
    92
         *  * it was zero
51d644c8d5a2 fix player-pivoted rope
terom
parents: 290
diff changeset
    93
         *  * we don't know the object (should this thrown an exception instead?)
51d644c8d5a2 fix player-pivoted rope
terom
parents: 290
diff changeset
    94
         *
51d644c8d5a2 fix player-pivoted rope
terom
parents: 290
diff changeset
    95
         * @return the NetworkObject* corresponding to the NetworkObjectID in the packet, or NULL if zero/not found
276
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 223
diff changeset
    96
         */
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 223
diff changeset
    97
        NetworkObject* read_object (NetworkPacketInput &pkt);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    98
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    99
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   100
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   101
 * A NetworkObjectController intended for use with a server.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   102
 *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   103
 * This has an id_pool that new NetworkObjectIDs can be generated from, and this doesn't accept unknown
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   104
 * NetworkObjectIDs from clients.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   105
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   106
class NetworkObject_ServerController : public NetworkObjectController {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   107
    friend class NetworkObject_Server;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   108
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   109
    private:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   110
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   111
         * The id_pool that we use to generate NetworkObjectIDs for new NetworkObject's
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   112
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   113
        NetworkObjectID id_pool;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   114
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   115
    public:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   116
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   117
         * @see NetworkObjectController
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   118
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   119
        NetworkObject_ServerController (NetworkSession &session, NetworkChannelID channel_id);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   120
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   121
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   122
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   123
         * Get a new NetworkObjectID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   124
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   125
        NetworkObjectID getObjectID (void);
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   126
        
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   127
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   128
         * Throw an error, as we don't accept unknown NetworkObjects from clients
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   129
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   130
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacketInput &pkt, NetworkNode *node);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   131
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   132
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   133
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   134
 * A NetworkObjectController intended for use with a client.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   135
 *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   136
 * This provides two ways to handle unknown objects: override handle_create, or use sig_create
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   137
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   138
class NetworkObject_ClientController : public NetworkObjectController {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   139
    friend class NetworkObject_Client;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   140
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   141
    protected:
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   142
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   143
         * The server node, as returned by NetworkSession::connect
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   144
         */
431
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
   145
        NetworkNode &server;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   146
        
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   147
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   148
         * A mapping of NetworkMessageID -> sig_create, used by the default handle_create
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   149
         */
223
2fcaf54ed37b basic network-projectiles
terom
parents: 200
diff changeset
   150
        std::map<NetworkMessageID, CL_Signal_v2<NetworkObject_Client*, NetworkPacketInput&> > _map_sig_create;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   151
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   152
    public:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   153
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   154
         * Construct a NetworkObjectController using the given NetworkNode (as returned by NetworkSession::connect) as
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   155
         * a server.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   156
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   157
         * @see NetworkObjectController
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   158
         */
431
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
   159
        NetworkObject_ClientController (NetworkSession &session, NetworkChannelID channel_id, NetworkNode &server);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   160
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   161
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   162
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   163
         * Handle unknown NetworkObjectIDs by constructing a new NetworkObject_Client and calling sig_create.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   164
         * 
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   165
         * This can be overriden to handle this differently, e.g. to create an instance of a NetworkObject_Client
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   166
         * subclass instead.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   167
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   168
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacketInput &pkt, NetworkNode *node);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   169
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   170
    public:  
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   171
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   172
         * Signal triggered by default handle_create when we get a message for an unknown NetworkObject.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   173
         * The signal gets the new NetworkObject_Client, and the packet itself.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   174
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   175
         * @param msg_id the NetworkMessageID to handle creates for
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   176
         */
223
2fcaf54ed37b basic network-projectiles
terom
parents: 200
diff changeset
   177
        CL_Signal_v2<NetworkObject_Client*, NetworkPacketInput&>& sig_create (NetworkMessageID msg_id) { return _map_sig_create[msg_id]; }
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   178
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   179
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   180
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   181
 * Base class of NetworkObject_(Client/Server)
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   182
 *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   183
 * A NetworkObject has an NetworkObjectID, and can handle packets to/from this object
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   184
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   185
class NetworkObject {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   186
    friend class NetworkObjectController;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   187
    friend std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   188
431
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
   189
    // XXX: needs to access controller and obj_id
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
   190
    friend class NetworkMessage;
c6d7272a164b rework Network send() code to use NetworkTarget/Node/Group::send classes, add a NetworkMessage class for sending NetworkObject messages, and fix a bug whereby the server's client TCP sockets weren't nonblocking.... I wonder how this has worked before?\!
Tero Marttila <terom@fixme.fi>
parents: 400
diff changeset
   191
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   192
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   193
        /**
337
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   194
         * Generic controller
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   195
         */
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   196
        NetworkObjectController &controller;
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   197
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   198
        /**
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   199
         * This object's object id
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   200
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   201
        NetworkObjectID obj_id;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   202
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   203
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   204
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   205
         * Construct a NetworkObject using the given controller and object id
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   206
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   207
         * @param controller the NetworkObjectController (subclass)
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   208
         * @param obj_id our NetworkObjectID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   209
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   210
        NetworkObject (NetworkObjectController &controller, NetworkObjectID obj_id);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   211
        
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   212
        /**
337
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   213
         * Removes this object from the controller's objects list
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   214
         */
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   215
        ~NetworkObject (void);
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   216
        
ecde18d07879 implement NetworkObject destructor, and increase BounceBounce recoil
terom
parents: 328
diff changeset
   217
        /**
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   218
         * Abstract method to handle packets sent to this object
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   219
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   220
         * @param node the NetworkNode that sent this packet to us
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   221
         * @param msg_id the packet's NetworkMessageID
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   222
         * @param pkt the packet itself, with the headers read
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   223
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   224
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacketInput &pkt) = 0;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   225
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   226
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   227
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   228
 * Formats the object as "<NetworkObject #" <obj_id> ">"
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   229
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   230
std::ostream& operator<< (std::ostream &s, const NetworkObject &obj);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   231
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   232
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   233
 * A server-side NetworkObject
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   234
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   235
class NetworkObject_Server : public NetworkObject {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   236
    friend class NetworkObject_ServerController;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   237
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   238
    protected:
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   239
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   240
         * The NetworkObject_ServerController
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   241
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   242
        NetworkObject_ServerController &controller;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   243
        
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   244
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   245
         * Mapping of NetworkMessageID -> sig_message used for received messages
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   246
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   247
        std::map<NetworkMessageID, CL_Signal_v2<NetworkNode*, NetworkPacketInput&> > _map_sig_message;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   248
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   249
    public:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   250
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   251
         * @see NetworkObject
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   252
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   253
        NetworkObject_Server (NetworkObject_ServerController &controller);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   254
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   255
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   256
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   257
         * Handle an incoming packet by invoking the appopriate sig_message
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   258
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   259
         * @see NetworkObject::handlePacket
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   260
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   261
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacketInput &pkt);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   262
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   263
    public:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   264
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   265
         * Triggered whenever we receive a message of the given type on this object, giving the node that sent it and the
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   266
         * packet itself
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   267
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   268
         * @param msg_id the NetworkMessageID to handle
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   269
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   270
        CL_Signal_v2<NetworkNode*, NetworkPacketInput&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   271
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   272
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   273
/**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   274
 * A client-side NetworkObject
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   275
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   276
class NetworkObject_Client : public NetworkObject {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   277
    friend class NetworkObject_ClientController;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   278
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   279
    protected:
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   280
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   281
         * Our NetworkObject_ClientController
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   282
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   283
        NetworkObject_ClientController &controller;
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   284
        
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   285
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   286
         * Our mapping of NetworkMessageID -> sig_message, used to handle received packets
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   287
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   288
        std::map<NetworkMessageID, CL_Signal_v1<NetworkPacketInput&> > _map_sig_message;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   289
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   290
    protected:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   291
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   292
         * @see NetworkObject
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   293
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   294
        NetworkObject_Client (NetworkObject_ClientController &controller, NetworkObjectID id);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   295
        
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   296
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   297
         * Handle an incoming packet by invoking the appropriate sig_message.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   298
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   299
         * This assumes that packets only come from the server
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   300
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   301
         * @see NetworkObject::handlePacket
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   302
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   303
        virtual void handle_packet (NetworkNode *node, NetworkMessageID msg_id, NetworkPacketInput &pkt);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   304
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   305
    public:
290
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   306
        /**
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   307
         * Triggered whenever we receive a message of the given type on this object from the server.
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   308
         *
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   309
         * @param msg_id the NetworkMessageID to handle
f8e69f493460 NetworkObject + NetworkServer documentation
terom
parents: 276
diff changeset
   310
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   311
        CL_Signal_v1<NetworkPacketInput&>& sig_message (NetworkMessageID msg_id) { return _map_sig_message[msg_id]; }
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   312
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   313
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   314
#endif /* NETWORK_OBJECT_HH */