src/Network/Client.hh
author terom
Wed, 17 Dec 2008 00:40:22 +0000
changeset 381 9b35bc329d23
parent 332 78657bf06302
child 400 d64bf28c4340
permissions -rw-r--r--
separate sockaddr stuff out of NetworkAddress... now called NetworkEndpoint
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     1
#ifndef NETWORKCLIENT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     2
#define NETWORKCLIENT_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     3
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     4
// forward-declare
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
     5
class NetworkClient;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     6
class NetworkClientLocalPlayer;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     7
class NetworkClientRemotePlayer;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     8
332
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
     9
#include "../GameState.hh"
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    10
#include "../Engine.hh"
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    11
#include "Session.hh"
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    12
#include "Object.hh"
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    13
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    14
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    15
 * Our specialized NetworkObject_ClientController that overrides handle_create to create the right kind of
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    16
 * object (a subclass of NetowrkClientObject).
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    17
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    18
class NetworkClientController : public NetworkObject_ClientController {
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    19
    protected:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    20
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    21
         * The NetworkClient
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    22
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    23
        NetworkClient &client;
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    24
    
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    25
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    26
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    27
         * Control objects on the given client using the client.netsession's NETCHAN_CORE channel
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    28
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    29
        NetworkClientController (NetworkClient &client);
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    30
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    31
    protected:
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    32
        /**
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    33
         * We override handle_create from NetworkObject_ClientController to call one of the on_* methods, which creates
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    34
         * a NetworkClientObject subclass
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    35
         *
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    36
         * @see NetworkObject_ClientController::handle_create
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    37
         */
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    38
        virtual void handle_create (NetworkObjectID obj_id, NetworkMessageID msg_id, NetworkPacketInput &pkt, NetworkNode *node);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    39
        
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    40
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    41
         * Handle NETMSG_SERVER_HELLO -> NetworkClientLocalPlayer
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    42
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    43
        void on_server_hello (NetworkObjectID obj_id, NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    44
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    45
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    46
         * Handle NETMSG_PLAYER_INFO -> NetworkClientRemotePlayer
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    47
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    48
        void on_player_info (NetworkObjectID obj_id, NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    49
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    50
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    51
         * Handle NETMSG_PLAYER_JOIN -> NetworkClientRemotePlayer
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    52
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    53
        void on_player_join (NetworkObjectID obj_id, NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    54
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    55
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    56
         * Handle NETMSG_PROJECTILE_PLAYER_FIRED -> NetworkClientProjectile
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    57
         */
276
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 274
diff changeset
    58
        void on_projectile_player_fired (NetworkObjectID obj_id, NetworkPacketInput &pkt);
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    59
};
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    60
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    61
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    62
 * Our NetworkClient, that connects to a NetworkServer. This has the GameState, NetworkSession, NetworkClientController, etc.
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    63
 */
187
f41f894213ca restructure network code a bit
terom
parents: 186
diff changeset
    64
class NetworkClient {
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    65
    friend class NetworkClientController;
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    66
    friend class NetworkClientObject;
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    67
    friend class NetworkClientPlayerBase;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    68
    friend class NetworkClientLocalPlayer;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    69
    friend class NetworkClientRemotePlayer;
223
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
    70
    friend class NetworkClientProjectile;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    71
187
f41f894213ca restructure network code a bit
terom
parents: 186
diff changeset
    72
    protected:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    73
        /**
332
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    74
         * The Engine
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    75
         */
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    76
        Engine &engine;
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    77
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
    78
        /**
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    79
         * The GameState
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    80
         */
187
f41f894213ca restructure network code a bit
terom
parents: 186
diff changeset
    81
        GameState &state;
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    82
187
f41f894213ca restructure network code a bit
terom
parents: 186
diff changeset
    83
        CL_SlotContainer slots;
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    84
        
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    85
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    86
         * The connect()-mode NetworkSession
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    87
         */
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    88
        NetworkSession netsession;
187
f41f894213ca restructure network code a bit
terom
parents: 186
diff changeset
    89
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    90
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    91
         * The server NetworkNode from Netsession::connect
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    92
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    93
        NetworkNode *server;
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    94
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    95
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    96
         * Our specialized NetworkObject_ClientController
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
    97
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
    98
        NetworkClientController controller;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    99
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   100
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   101
        /**
381
9b35bc329d23 separate sockaddr stuff out of NetworkAddress... now called NetworkEndpoint
terom
parents: 332
diff changeset
   102
         * Create a NetworkClient with the given GameState, connecting a server on the given NetworkEndpoint
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   103
         *
332
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   104
         * @param engine the Engine we're running as
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   105
         * @param state the GameState to use
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   106
         * @param connect_to the address to connect to
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   107
         */
381
9b35bc329d23 separate sockaddr stuff out of NetworkAddress... now called NetworkEndpoint
terom
parents: 332
diff changeset
   108
        NetworkClient (Engine &engine, GameState &state, const NetworkEndpoint &connect_to);
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   109
    
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   110
    protected:
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   111
        /**
332
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   112
         * We have disconnected from the server
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   113
         */
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   114
        void on_disconnected (void);
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   115
78657bf06302 handle NetworkClient server-disconnect by logging an error and stopping the engine
terom
parents: 330
diff changeset
   116
        /**
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   117
         * Receive the NETCHAN_TERRAIN_ARRAY message from the server and apply it to our GameState::world terrain
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   118
         */
203
3ec7ab40755f send initial terrain data to clients using a new NETCHAN_TERRAIN_ARRAY channel using raw BigNetworkPacket
terom
parents: 200
diff changeset
   119
        void on_terrain_array (NetworkPacketInput &pkt, NetworkNode *node);
185
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
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   122
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   123
         * Called by NetworkClientRemotePlayer when they get disconnected. Doesn't do anything currently
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   124
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   125
        void player_quit (NetworkClientRemotePlayer *player);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   126
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   127
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   128
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   129
 * Our base NetworkObject_Client object, containing the NetworkClient and a CL_SlotContainer for conveniance
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   130
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   131
class NetworkClientObject : public NetworkObject_Client {
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   132
    protected:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   133
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   134
         * The NetworkClient
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   135
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   136
        NetworkClient &client;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   137
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   138
        CL_SlotContainer slots;
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   139
        
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   140
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   141
         * Construct this using the given client and obj_id, passing the client.controller and obj_id to the
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   142
         * NetworkObject_Client's constructor
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   143
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   144
        NetworkClientObject (NetworkClient &client, NetworkObjectID obj_id);
223
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
   145
};
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
   146
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   147
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   148
 * Our base class for NetworkClient Players, this implements most of the server -> client messages
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   149
 *
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   150
 * This inherits from NetworkClientObject and virtually from Player, as classes should inherit from both this and
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   151
 * LocalPlayer/RemotePlayer
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   152
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   153
class NetworkClientPlayerBase : public NetworkClientObject, public virtual Player {
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   154
    protected:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   155
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   156
         * Dummy-initialize Player, initialize NetworkClientObject, and hook up our signals
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   157
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   158
        NetworkClientPlayerBase (NetworkClient &client, NetworkObjectID obj_id, Vector position);
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   159
    
302
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   160
    protected:
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   161
        // @{
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   162
        /**
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   163
         * These should never be called directly, always via the network
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   164
         */
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   165
        virtual void spawn (Vector position);
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   166
        virtual void respawn (TimeMS dt);
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   167
        // @}
303
36a502a0023f just ignore NetworkClientPlayerBase::die
terom
parents: 302
diff changeset
   168
        
36a502a0023f just ignore NetworkClientPlayerBase::die
terom
parents: 302
diff changeset
   169
        /**
36a502a0023f just ignore NetworkClientPlayerBase::die
terom
parents: 302
diff changeset
   170
         * Ignore, the servers tells us this
36a502a0023f just ignore NetworkClientPlayerBase::die
terom
parents: 302
diff changeset
   171
         */
36a502a0023f just ignore NetworkClientPlayerBase::die
terom
parents: 302
diff changeset
   172
        virtual void die (bool start_timer = true);
302
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   173
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   174
    private:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   175
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   176
         * NETMSG_PLAYER_POSITION -> PhysicsObject::updatePhysics
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   177
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   178
        void on_position (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   179
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   180
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   181
         * NETMSG_PLAYER_DIG -> Player::handleDig
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   182
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   183
        void on_dig (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   184
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   185
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   186
         * NETMSG_PLAYER_WEAPON_CHANGE -> Player::rope.handleChangeWeapon
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   187
         */
239
550397d9d479 implement network weapon changes and fix weapon firing
terom
parents: 224
diff changeset
   188
        void on_weapon_change (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   189
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   190
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   191
         * NETMSG_PLAYER_ROPE_THROW -> Player::rope.updateState(ROPE_FLYING)
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   192
         */
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   193
        void on_rope_throw (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   194
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   195
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   196
         * NETMSG_PLAYER_ROPE_FIXED -> Player::rope.updateState(ROPE_FIXED)
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   197
         */
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   198
        void on_rope_fixed (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   199
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   200
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   201
         * NETMSG_PLAYER_ROPE_RELEASED -> Player::rope.updateState(ROPE_FOLDED)
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   202
         */
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   203
        void on_rope_released (NetworkPacketInput &pkt);
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   204
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   205
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   206
         * NETMSG_PLAYER_ROPE_LENGTH -> Player::Rope.updateLength
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   207
         */
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 239
diff changeset
   208
        void on_rope_length (NetworkPacketInput &pkt);
302
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   209
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   210
        /**
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   211
         * NETMSG_PLAYER_SPAWN -> Player::spawn
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   212
         */
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   213
        void on_spawn (NetworkPacketInput &pkt);
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   214
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   215
        /**
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   216
         * NETMSG_PLAYER_Die -> Player::die
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   217
         */
e734d8e9bbb5 make spawn/die work over the network
terom
parents: 296
diff changeset
   218
        void on_die (NetworkPacketInput &pkt);
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   219
};
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   220
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   221
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   222
 * Our NetworkClientPlayerBase + LocalPlayer specialization, this lets us handle local input
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   223
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   224
class NetworkClientLocalPlayer : public NetworkClientPlayerBase, public LocalPlayer {
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   225
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   226
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   227
         * Calls NetworkClientPlayerBase/Player constructors, calls GameState::setLocalPlayer
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   228
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   229
        NetworkClientLocalPlayer (NetworkClient &client, NetworkObjectID obj_id, Vector position);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   230
        
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   231
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   232
         * Overriden from LocalPlayer to send a NETMSG_CLIENT_INPUT message without executing LocalPlayer::handleInput
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   233
         * locally
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   234
         */
277
40f4a03917e2 fix NetworkClient handleInput
terom
parents: 276
diff changeset
   235
        virtual void handleInput (PlayerInput input, TimeMS dt);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   236
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   237
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   238
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   239
 * Our NetworkClientPlayerBase + RemotePlayer specialization, this lets us handle players quitting
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   240
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   241
class NetworkClientRemotePlayer : public NetworkClientPlayerBase, public RemotePlayer {
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   242
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   243
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   244
         * Calls NetworkClientPlayerBase/Player constructors and hooks up signals
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   245
         */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   246
        NetworkClientRemotePlayer (NetworkClient &client, NetworkObjectID obj_id, Vector position);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   247
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   248
    private:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   249
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   250
         * Calls NetworkClient::player_quit, and then destroys ourselves
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   251
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 187
diff changeset
   252
        void on_quit (NetworkPacketInput &pkt);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   253
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   254
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   255
/**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   256
 * A Projectile that was created on the server
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   257
 */
274
c35307e8645c add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
terom
parents: 263
diff changeset
   258
class NetworkClientProjectile : public NetworkClientObject, public Projectile {
223
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
   259
    public:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   260
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   261
         * Call Projectile's constructor, hook up signals and call player->weaponFired
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   262
         */
276
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 274
diff changeset
   263
        NetworkClientProjectile (NetworkClient &client, NetworkObjectID obj_id, Player *player, Vector position, 
87434abc1ba1 ability to send NetworkObjectID's via packets, modify Network Projectiles to use this and fix recoil/reloading
terom
parents: 274
diff changeset
   264
                Vector velocity, Weapon *weapon);
224
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   265
    
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   266
    protected:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   267
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   268
         * Overrides Projectile::onDestroy to ignore this, as we must wait for the server to tell us where it impacted
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   269
         * so that we can remove the ground reliably
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   270
         */
224
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   271
        virtual void onDestroy (Vector position, bool removeGround);
296
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   272
        
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   273
        /**
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   274
         * Overrides Projectile::onHitPlayer to ignore this, as we must wait for the server to tell us if it really did
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   275
         * happen.
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   276
         */
330
dcc47278e5ab fix Network Projectile::onHitPlayer
terom
parents: 303
diff changeset
   277
        virtual void onHitPlayer (Player *player);
224
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   278
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   279
    private:
294
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   280
        /**
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   281
         * NETMSG_PROJECTILE_DESTROY -> Projectile::onDestory
fd58e7d01bec finish network documentation
terom
parents: 277
diff changeset
   282
         */
224
e6faefba2ec1 fixed logger, and network projectiles should work reasonably well now
terom
parents: 223
diff changeset
   283
        void on_destroy (NetworkPacketInput &pkt);
296
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   284
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   285
        /**
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   286
         * NETMSG_PROJECTILE_HIT_PLAYER -> Projectile::onHitPlayer
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   287
         */
4d3ebaa29430 add separate Types.hh, and fix projectile-worm collisions on network
terom
parents: 294
diff changeset
   288
        void on_hit_player (NetworkPacketInput &pkt);
223
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
   289
};
2fcaf54ed37b basic network-projectiles
terom
parents: 221
diff changeset
   290
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   291
#endif