open_toontown_panda3d/pandatool/src/pstatserver/pStatServer.h

95 lines
2.9 KiB
C++

// Filename: pStatServer.h
// Created by: drose (09Jul00)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license. You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////
#ifndef PSTATSERVER_H
#define PSTATSERVER_H
#include "pandatoolbase.h"
#include "pStatListener.h"
#include "connectionManager.h"
#include "vector_float.h"
#include "pmap.h"
#include "pdeque.h"
class PStatReader;
////////////////////////////////////////////////////////////////////
// Class : PStatServer
// Description : The overall manager of the network connections. This
// class gets the ball rolling; to use this package, you
// need to derive from this and define make_monitor() to
// allocate and return a PStatMonitor of the suitable
// type.
//
// Then create just one PStatServer object and call
// listen() with the port(s) you would like to listen
// on. It will automatically create PStatMonitors as
// connections are established and mark the connections
// closed as they are lost.
////////////////////////////////////////////////////////////////////
class PStatServer : public ConnectionManager {
public:
PStatServer();
~PStatServer();
bool listen(int port = -1);
void poll();
void main_loop(bool *interrupt_flag = NULL);
virtual PStatMonitor *make_monitor()=0;
void add_reader(Connection *connection, PStatReader *reader);
void remove_reader(Connection *connection, PStatReader *reader);
int get_udp_port();
void release_udp_port(int port);
int get_num_user_guide_bars() const;
float get_user_guide_bar_height(int n) const;
void move_user_guide_bar(int n, float height);
int add_user_guide_bar(float height);
void remove_user_guide_bar(int n);
int find_user_guide_bar(float from_height, float to_height) const;
virtual bool is_thread_safe();
protected:
virtual void connection_reset(const PT(Connection) &connection,
PRErrorCode errcode);
private:
void user_guide_bars_changed();
PStatListener *_listener;
typedef pmap<PT(Connection), PStatReader *> Readers;
Readers _readers;
typedef pvector<PStatReader *> LostReaders;
LostReaders _lost_readers;
LostReaders _removed_readers;
typedef pdeque<int> Ports;
Ports _available_udp_ports;
int _next_udp_port;
typedef vector_float GuideBars;
GuideBars _user_guide_bars;
};
#endif