00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef VRPNCLIENT_H
00016 #define VRPNCLIENT_H
00017
00018 #include "pandabase.h"
00019 #include "clientBase.h"
00020
00021 #include "vrpn_interface.h"
00022
00023 class VrpnTracker;
00024 class VrpnTrackerDevice;
00025 class VrpnButton;
00026 class VrpnButtonDevice;
00027 class VrpnAnalog;
00028 class VrpnAnalogDevice;
00029 class VrpnDial;
00030 class VrpnDialDevice;
00031
00032
00033
00034
00035
00036
00037
00038 class EXPCL_PANDA_VRPN VrpnClient : public ClientBase {
00039 PUBLISHED:
00040 VrpnClient(const string &server_name);
00041 ~VrpnClient();
00042
00043 INLINE const string &get_server_name() const;
00044 INLINE bool is_valid() const;
00045 INLINE bool is_connected() const;
00046
00047 void write(ostream &out, int indent_level = 0) const;
00048
00049 public:
00050 INLINE static double convert_to_secs(struct timeval msg_time);
00051
00052 protected:
00053 virtual PT(ClientDevice) make_device(TypeHandle device_type,
00054 const string &device_name);
00055
00056 virtual bool disconnect_device(TypeHandle device_type,
00057 const string &device_name,
00058 ClientDevice *device);
00059
00060 virtual void do_poll();
00061
00062 private:
00063 PT(ClientDevice) make_tracker_device(const string &device_name);
00064 PT(ClientDevice) make_button_device(const string &device_name);
00065 PT(ClientDevice) make_analog_device(const string &device_name);
00066 PT(ClientDevice) make_dial_device(const string &device_name);
00067 void disconnect_tracker_device(VrpnTrackerDevice *device);
00068 void disconnect_button_device(VrpnButtonDevice *device);
00069 void disconnect_analog_device(VrpnAnalogDevice *device);
00070 void disconnect_dial_device(VrpnDialDevice *device);
00071
00072 VrpnTracker *get_tracker(const string &tracker_name);
00073 void free_tracker(VrpnTracker *vrpn_tracker);
00074
00075 VrpnButton *get_button(const string &button_name);
00076 void free_button(VrpnButton *vrpn_button);
00077
00078 VrpnAnalog *get_analog(const string &analog_name);
00079 void free_analog(VrpnAnalog *vrpn_analog);
00080
00081 VrpnDial *get_dial(const string &dial_name);
00082 void free_dial(VrpnDial *vrpn_dial);
00083
00084 private:
00085 string _server_name;
00086 vrpn_Connection *_connection;
00087
00088 typedef pmap<string, VrpnTracker *> Trackers;
00089 typedef pmap<string, VrpnButton *> Buttons;
00090 typedef pmap<string, VrpnAnalog *> Analogs;
00091 typedef pmap<string, VrpnDial *> Dials;
00092
00093 Trackers _trackers;
00094 Buttons _buttons;
00095 Analogs _analogs;
00096 Dials _dials;
00097
00098
00099 public:
00100 static TypeHandle get_class_type() {
00101 return _type_handle;
00102 }
00103 static void init_type() {
00104 ClientBase::init_type();
00105 register_type(_type_handle, "VrpnClient",
00106 ClientBase::get_class_type());
00107 }
00108 virtual TypeHandle get_type() const {
00109 return get_class_type();
00110 }
00111 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00112
00113 private:
00114 static TypeHandle _type_handle;
00115 };
00116
00117 #include "vrpnClient.I"
00118
00119 #endif
00120
00121