src/Network/Session.hh
author Tero Marttila <terom@fixme.fi>
Sun, 02 Jun 2013 16:15:23 +0300
changeset 448 34bdf0783874
parent 431 c6d7272a164b
permissions -rw-r--r--
network: fix size_t compile errors
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     1
#ifndef NETWORK_SESSION_HH
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
     2
#define NETWORK_SESSION_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: 381
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: 381
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: 381
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: 381
diff changeset
     7
 * Support for a groups of clients/servers with associated TCP/UDP sockets
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: 381
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: 381
diff changeset
     9
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    10
#include <map>
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    11
#include <stdint.h>
448
34bdf0783874 network: fix size_t compile errors
Tero Marttila <terom@fixme.fi>
parents: 431
diff changeset
    12
#include <stddef.h>
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
// forward-declare
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    15
class NetworkSession;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    16
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    17
/**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    18
 * Size of a NetworkSession's packet header:
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    19
 *  uint16      channel_id
203
3ec7ab40755f send initial terrain data to clients using a new NETCHAN_TERRAIN_ARRAY channel using raw BigNetworkPacket
terom
parents: 202
diff changeset
    20
 */
3ec7ab40755f send initial terrain data to clients using a new NETCHAN_TERRAIN_ARRAY channel using raw BigNetworkPacket
terom
parents: 202
diff changeset
    21
const size_t NETWORK_SESSION_HEADER_SIZE = sizeof(uint16_t);
3ec7ab40755f send initial terrain data to clients using a new NETCHAN_TERRAIN_ARRAY channel using raw BigNetworkPacket
terom
parents: 202
diff changeset
    22
186
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    23
#include "TCP.hh"
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    24
#include "UDP.hh"
0738f2949a2b move src/Network% to src/Network/%
terom
parents: 185
diff changeset
    25
#include "Node.hh"
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
    26
#include "Group.hh"
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
    27
#include "Packet.hh"
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
    28
#include "Channel.hh"
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    29
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    30
/**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    31
 * A NetworkSession provides TCP/UDP Server and Client functionality, representing remote NetworkSessions with
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    32
 * NetworkNodes. A NetworkSession can then communicate with its NetworkNodes using TCP or UDP NetworkPackets.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    33
 */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    34
class NetworkSession {
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    35
    friend class NetworkNode;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    36
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    37
    private:
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    38
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    39
         * The application's magic ID
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    40
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    41
        uint64_t magic;
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    42
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    43
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    44
         * Our TCP server, if we're in listen() mode
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    45
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    46
        NetworkTCPServer *tcp_srv;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    47
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    48
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    49
         * Our UDP server, if we're in listen() mode
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    50
         */
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    51
        NetworkUDP *udp_srv;
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    52
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    53
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    54
         * Our UDP client, if we're in connect() mode
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    55
         */
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    56
        NetworkUDP *udp_client;
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    57
        
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    58
        CL_SlotContainer slots;
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    59
        
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    60
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    61
         * A map of NetworkAddress -> NetworkNode, manipulated when TCP connections are established/broken down,
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    62
         * and used to map UDP packets to their NetworkNode
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    63
         */
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
    64
        std::map<NetworkAddress, NetworkNode*> node_map;
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
    65
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
    66
        /**
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
    67
         * A plain list of connected NetworkNode's
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
    68
         */
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
    69
        std::list<NetworkNode*> node_list;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    70
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    71
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    72
         * A map of NetworkChannelID -> signal, used to signal our users when we receieve packets
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    73
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
    74
        std::map<NetworkChannelID, CL_Signal_v2<NetworkPacketInput&, NetworkNode *> > _map_sig_chan_message;
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    75
    
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    76
    public:
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    77
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    78
         * Construct an idle NetworkSession using the given application magic, which should be unique to tell different
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    79
         * applications apart from each other.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    80
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    81
         * @param magic unique application magic
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    82
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    83
        NetworkSession (uint64_t magic);
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    84
        
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    85
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    86
         * Have the NetworkSession enter server mode, listening on the given address using both TCP and UDP
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    87
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    88
         * @param addr local address to listen on
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    89
         */
381
9b35bc329d23 separate sockaddr stuff out of NetworkAddress... now called NetworkEndpoint
terom
parents: 286
diff changeset
    90
        void listen (const NetworkEndpoint &addr);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
    91
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    92
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    93
         * Have the NetworkSession enter client mode, establishing a TCP connection to the server, and then allocating
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    94
         * an UDP socket on the same local address as the TCP connection.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    95
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    96
         * @param addr remote address to connect to
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
    97
         */
381
9b35bc329d23 separate sockaddr stuff out of NetworkAddress... now called NetworkEndpoint
terom
parents: 286
diff changeset
    98
        NetworkNode* connect (const NetworkEndpoint &addr);
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
    protected:
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   101
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   102
         * Used to build a new NetworkNode by connect/on_tcp_client. Can be used to override what kind of NetworkNodes
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   103
         * get created. Type tells what kind of node this is.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   104
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   105
         * @param tcp the TCP transport for this node
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   106
         * @param udp the UDP socket to use for this node
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   107
         * @param addr the remote address
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   108
         * @param type the type of node
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   109
         * @see NetworkNodeType
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   110
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   111
        virtual NetworkNode *build_node (NetworkTCPTransport *tcp, NetworkUDP *udp, const NetworkAddress &addr, enum NetworkNodeType type);
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   112
        
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   113
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   114
         * A NetworkNode's TCP connection has failed. Removes the node from our nodes-map (using node->getRemoteAddress)
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   115
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   116
         * @param node the node that has disconnected
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   117
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   118
        void handle_disconnect (NetworkNode *node);
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   119
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   120
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   121
         * We have received a NetworkPacket from the given node (either TCP or UDP, we don't know)
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   122
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   123
         * @param pkt the NetworkPacket that we received
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   124
         * @param node the node that sent it
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   125
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   126
        void handle_message (NetworkPacketInput &pkt, NetworkNode *node);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   127
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   128
    private:
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   129
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   130
         * Our tcp_srv has accept()'d a new client.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   131
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   132
         * Create a NetworkNode using build_node and udp_srv, add it to our node-map, and trigger sig_node_connected
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   133
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   134
        void on_tcp_client (NetworkTCPTransport *client);
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   135
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   136
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   137
         * Our udp_srv has recv()'d a NetworkPacket.
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   138
         *
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   139
         * Map it to a NetworkNode using our node-map and call handle_message
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   140
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   141
        void on_udp_packet (NetworkPacketInput &pkt, const NetworkAddress &addr);
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   142
        
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   143
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   144
         * New-client signal
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   145
         */
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   146
        CL_Signal_v1<NetworkNode*> _sig_node_connected;
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   147
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   148
    public:
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   149
        /**
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
   150
         * Get a NetworkGroup containing all connected nodes
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   151
         */
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
   152
        NetworkGroup all_nodes (void) {
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
   153
            return NetworkGroup(node_list.begin(), node_list.end(), NULL);
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
   154
        }
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   155
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   156
        /**
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
   157
         * Get a NetworkGroup containing all connected nodes, but excluding the given one
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
   158
         */
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
        NetworkGroup all_nodes_except (NetworkNode &node) {
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
   160
            return NetworkGroup(node_list.begin(), node_list.end(), &node);
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
   161
        }
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
   162
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
   163
        /**
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
   164
         * Write the appropriate NetworkSession header to the given packet. Can be used to prepare packets for use with
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
   165
         * NetworkTarget::send_raw(). The size of the header is equal to NETWORK_SESSION_HEADER_SIZE
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   166
         *
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
   167
         * XXX: this interface needs fixing to be less procedural
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
   168
         *
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
   169
         * @param pkt the packet to write the header to
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
   170
         * @param channel_id the NetworkChannelID to use
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
   171
         *
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
   172
         * @see NetworkTarget::send_raw()
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
   173
         * @see NETWORK_SESSION_HEADER_SIZE
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   174
         */
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
   175
        void write_packet_header (NetworkPacketOutput &pkt, NetworkChannelID channel_id);
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   176
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   177
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   178
         * A new node has connected to us
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   179
         */
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   180
        CL_Signal_v1<NetworkNode*>& sig_node_connected (void) { return _sig_node_connected; }
202
b3f5d766391e support sending of raw packets
terom
parents: 200
diff changeset
   181
286
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   182
        /**
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   183
         * We have received a NetworkPacket from a NetworkNode on the given NetworkChannelID
2a8f20a53ff2 more network documentation
terom
parents: 203
diff changeset
   184
         */
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents: 186
diff changeset
   185
        CL_Signal_v2<NetworkPacketInput&, NetworkNode *>& sig_chan_message (NetworkChannelID cid) { return _map_sig_chan_message[cid]; }
185
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   186
};
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   187
25becd2cb026 that's not a prototype anymore... at least it shouldn't be
terom
parents:
diff changeset
   188
#endif /* NETWORK_SESSION_HH */