src/proto2/NetworkSession.hh
author terom
Mon, 10 Nov 2008 19:57:57 +0000
branchno-netsession
changeset 33 e53f09b378f4
child 34 1ea6554d703e
permissions -rw-r--r--
more untested, uncompiled code
#ifndef NETWORK_SESSION_HH
#define NETWORK_SESSION_HH

#include "NetworkTCP.hh"
#include "NetworkUDP.hh"

#include <map>

/*
 * Should be set to some 8-char magic value to identify the application
 */
typedef char[8] NetworkSessionMagic;

/*
 * Used to separate packets, ID zero is reserved for NetworkSession use
 */
typedef uint16_t NetworkChannelID;

class NetworkSession {
    private:
        NetworkSessionMagic magic;
        NetworkTCPServer *tcp_srv;
        NetworkUDP *udp_srv, *udp_client;

        CL_SlotContainer slots;

        std::map<NetworkAddress, NetworkNode*> nodes;
    
    public:
        NetworkSession (NetworkSessionMagic magic);

        void listen (const NetworkAddress &addr);
        NetworkNode* connect (const NetworkAddress &addr);

    private:
        void on_tcp_client (const NetworkTCPTransport *client);
        void on_disconnect (NetworkNode *node);

    public:
        void send_all (NetworkChannelID channel_id, const NetworkPacket &pkt, bool reliable = true);
        void send_all_except (NetworkChannelID channel_id, const NetworkPacket &pkt, const NetworkNode *node, bool reliable = true);

        CL_Signal_v1<NetworkNode*> sig_node_connected;
        CL_Signal_v1<NetworkNode*> sig_node_disconnected;
};

#endif /* NETWORK_SESSION_HH */