Panda3D
Public Member Functions | Static Public Member Functions | Protected Member Functions | Friends

ClientDevice Class Reference

Any of a number of different devices that might be attached to a ClientBase, including trackers, etc. More...

#include "clientDevice.h"

Inheritance diagram for ClientDevice:
TypedReferenceCount TypedObject ReferenceCount MemoryBase MemoryBase ClientAnalogDevice ClientButtonDevice ClientDialDevice ClientTrackerDevice VrpnAnalogDevice VrpnButtonDevice VrpnDialDevice VrpnTrackerDevice

List of all members.

Public Member Functions

virtual ~ClientDevice ()
 We don't actually call disconnect() at the ClientDevice level destructor, because by the time we get here we're already partly destructed.
void acquire ()
 Grabs the mutex associated with this particular device.
void disconnect ()
 Disconnects the ClientDevice from its ClientBase object.
virtual TypeHandle force_init_type ()
ClientBaseget_client () const
 Returns the ClientBase this device is associated with.
const string & get_device_name () const
 Returns the device name reported to the ClientBase.
TypeHandle get_device_type () const
 Returns the type of device this is considered to be to the ClientBase: a ClientTrackerDevice, ClientAnalogDevice, or what have you.
virtual TypeHandle get_type () const
bool is_connected () const
 Returns true if the device is still connected to its ClientBase, false otherwise.
virtual void output (ostream &out) const
void poll ()
 Causes the connected ClientBase to poll all of its clients, if necessary.
void unlock ()
 Releases the mutex associated with this particular device.
virtual void write (ostream &out, int indent_level=0) const

Static Public Member Functions

static TypeHandle get_class_type ()
static void init_type ()
 This function is declared non-inline to work around a compiler bug in g++ 2.96.

Protected Member Functions

 ClientDevice (ClientBase *client, TypeHandle device_type, const string &device_name)

Friends

class ClientBase

Detailed Description

Any of a number of different devices that might be attached to a ClientBase, including trackers, etc.

This is an abstract interface; the actual implementations are in ClientTrackerDevice, etc.

Definition at line 35 of file clientDevice.h.


Constructor & Destructor Documentation

ClientDevice::~ClientDevice ( ) [virtual]

We don't actually call disconnect() at the ClientDevice level destructor, because by the time we get here we're already partly destructed.

Instead, we should call disconnect() from each specific kind of derived class.

Definition at line 51 of file clientDevice.cxx.


Member Function Documentation

void ClientDevice::acquire ( ) [inline]

Grabs the mutex associated with this particular device.

The device will not update asynchronously while the mutex is held, allowing the user to copy the data out without fear of getting a partial update during the copy.

Definition at line 76 of file clientDevice.I.

Referenced by disconnect().

void ClientDevice::disconnect ( )

Disconnects the ClientDevice from its ClientBase object.

The device will stop receiving updates.

Normally, you should not need to call this explicitly (and it is probably a mistake to do so); it will automatically be called when the ClientDevice object destructs.

The lock should *not* be held while this call is made; it will explicitly grab the lock itself.

Definition at line 74 of file clientDevice.cxx.

References acquire(), ClientBase::disconnect_device(), and unlock().

ClientBase * ClientDevice::get_client ( ) const [inline]

Returns the ClientBase this device is associated with.

Definition at line 23 of file clientDevice.I.

const string & ClientDevice::get_device_name ( ) const [inline]

Returns the device name reported to the ClientBase.

This has some implementation-defined meaning to identify particular devices.

Definition at line 62 of file clientDevice.I.

TypeHandle ClientDevice::get_device_type ( ) const [inline]

Returns the type of device this is considered to be to the ClientBase: a ClientTrackerDevice, ClientAnalogDevice, or what have you.

This is not exactly the same thing as get_type(), because it does not return the exact type of the ClientDevice (e.g. it reports ClientTrackerDevice, not VrpnTrackerDevice).

Definition at line 50 of file clientDevice.I.

static void ClientDevice::init_type ( ) [inline, static]

This function is declared non-inline to work around a compiler bug in g++ 2.96.

Making it inline seems to cause problems in the optimizer.

Reimplemented from TypedReferenceCount.

Reimplemented in ClientAnalogDevice, ClientButtonDevice, ClientDialDevice, ClientTrackerDevice, VrpnAnalogDevice, VrpnButtonDevice, VrpnDialDevice, and VrpnTrackerDevice.

Definition at line 71 of file clientDevice.h.

References TypedReferenceCount::init_type().

Referenced by ClientTrackerDevice::init_type(), ClientDialDevice::init_type(), ClientButtonDevice::init_type(), and ClientAnalogDevice::init_type().

bool ClientDevice::is_connected ( ) const [inline]

Returns true if the device is still connected to its ClientBase, false otherwise.

Definition at line 34 of file clientDevice.I.

void ClientDevice::poll ( )

Causes the connected ClientBase to poll all of its clients, if necessary.

This will be a no-op if the client is running in forked mode, or if it has already polled everything this frame.

This should generally be called before accessing the data in this ClientDevice to ensure that it is fresh.

Definition at line 97 of file clientDevice.cxx.

References ClientBase::poll().

void ClientDevice::unlock ( ) [inline]

Releases the mutex associated with this particular device.

This should be called after all the data has been successfully copied out. See acquire().

Definition at line 90 of file clientDevice.I.

Referenced by disconnect().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations