// Filename: pStatMonitor.h // Created by: drose (08Jul00) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) Carnegie Mellon University. All rights reserved. // // All use of this software is subject to the terms of the revised BSD // license. You should have received a copy of this license along // with this source code in a file named "LICENSE." // //////////////////////////////////////////////////////////////////// #ifndef PSTATMONITOR_H #define PSTATMONITOR_H #include "pandatoolbase.h" #include "pStatClientData.h" #include "pStatView.h" #include "referenceCount.h" #include "pointerTo.h" #include "luse.h" #include "pmap.h" class PStatCollectorDef; class PStatServer; //////////////////////////////////////////////////////////////////// // Class : PStatMonitor // Description : This is an abstract class that presents the interface // to any number of different front-ends for the stats // monitor. One of these will be created by the // PStatMonitor as each client is connected; this class // is responsible for opening up a new strip-chart graph // or whatever is appropriate. It defines a number of // empty virtual functions that will be called as new // data becomes available. //////////////////////////////////////////////////////////////////// class PStatMonitor : public ReferenceCount { public: // The following functions are primarily for use by internal classes // to set up the monitor. PStatMonitor(PStatServer *server); virtual ~PStatMonitor(); void hello_from(const string &hostname, const string &progname); void bad_version(const string &hostname, const string &progname, int client_major, int client_minor, int server_major, int server_minor); void set_client_data(PStatClientData *client_data); // The following functions are for use by user code to determine // information about the client data available. bool is_alive() const; void close(); INLINE PStatServer *get_server(); INLINE const PStatClientData *get_client_data() const; INLINE string get_collector_name(int collector_index); const LRGBColor &get_collector_color(int collector_index); INLINE bool is_client_known() const; INLINE string get_client_hostname() const; INLINE string get_client_progname() const; PStatView &get_view(int thread_index); PStatView &get_level_view(int collector_index, int thread_index); // The following virtual methods may be overridden by a derived // monitor class to customize behavior. virtual string get_monitor_name()=0; virtual void initialized(); virtual void got_hello(); virtual void got_bad_version(int client_major, int client_minor, int server_major, int server_minor); virtual void new_collector(int collector_index); virtual void new_thread(int thread_index); virtual void new_data(int thread_index, int frame_number); virtual void lost_connection(); virtual void idle(); virtual bool has_idle(); virtual bool is_thread_safe(); virtual void user_guide_bars_changed(); protected: PStatServer *_server; private: PT(PStatClientData) _client_data; bool _client_known; string _client_hostname; string _client_progname; typedef pmap Views; Views _views; typedef pmap LevelViews; LevelViews _level_views; typedef pmap Colors; Colors _colors; }; #include "pStatMonitor.I" #endif