1#ifndef VRPN_SHARED_OBJECT
2#define VRPN_SHARED_OBJECT
39 vrpn_float64 newValue,
50 vrpn_float64 newValue,
63 void *userdata, vrpn_int32 newValue, timeval when,
66 void *userdata, vrpn_float64 newValue, timeval when,
69 void *userdata,
const char *newValue, timeval when,
75#define VRPN_SO_DEFAULT 0x00
76#define VRPN_SO_IGNORE_IDEMPOTENT 0x01
77#define VRPN_SO_DEFER_UPDATES 0x10
78#define VRPN_SO_IGNORE_OLD 0x100
131 const char *
name(
void)
const;
200 vrpn_bool acceptedUpdate);
244 void postBindCleanup(
void);
256 vrpn_int32
value(
void)
const;
257 operator vrpn_int32()
const;
277 void *userdata = NULL);
304 vrpn_bool isLocalSet,
308 void sendUpdate(vrpn_int32 newValue, timeval when);
310 void encode(
char **buffer, vrpn_int32 *len, vrpn_int32 newValue,
312 void encodeLamport(
char **buffer, vrpn_int32 *len, vrpn_int32 newValue,
319 void decode(
const char **buffer, vrpn_int32 *len, vrpn_int32 *newValue,
320 timeval *when)
const;
322 vrpn_int32 *newValue, timeval *when,
377 vrpn_float64
value(
void)
const;
378 operator vrpn_float64()
const;
398 void *userdata = NULL);
428 vrpn_bool isLocalSet);
431 void sendUpdate(vrpn_float64 newValue, timeval when);
432 void encode(
char **buffer, vrpn_int32 *len, vrpn_float64 newValue,
434 void decode(
const char **buffer, vrpn_int32 *len, vrpn_float64 *newValue,
435 timeval *when)
const;
479 const char *
value(
void)
const;
480 operator const char *()
const;
500 void *userdata = NULL);
530 vrpn_bool isLocalSet);
533 void sendUpdate(
const char *newValue, timeval when);
534 void encode(
char **buffer, vrpn_int32 *len,
const char *newValue,
536 void decode(
const char **buffer, vrpn_int32 *len,
char *newValue,
537 timeval *when)
const;
Generic connection class not specific to the transport mechanism.
Implements a distributed event clock as defined by Leslie Lamport in some seminal papers I can't find...
Timestamp for a single event, produced by a vrpn_LamportClock and hopefully generally usable in place...
void serverPostBindCleanup(void)
vrpn_bool isSerializer(void) const
int yankCallbacks(vrpn_bool isLocal)
must set d_lastUpdate BEFORE calling yankCallbacks()
const char * name(void) const
deferredUpdateCallbackEntry * d_deferredUpdateCallbacks
static int VRPN_CALLBACK handle_grantSerializer(void *, vrpn_HANDLERPARAM)
vrpn_int32 d_grantSerializer_type
Sent by the serializer to grant a request.
void becomeSerializer(void)
Requests that this instance of the shared object becomes the serializer (i.e. lock-arbitrator),...
virtual void sendUpdate(void)=0
Should invoke default sendUpdate() for this derived type.
vrpn_bool d_isNegotiatingSerializer
As long as we have inorder delivery, this should be sufficient to keep us from getting many at once.
vrpn_bool registerDeferredUpdateCallback(vrpnDeferredUpdateCallback, void *userdata)
The specified function will be passed userdata when this particular shared object defers an update (r...
vrpn_bool d_queueSets
If this is true, no set()s are processed; instead, they are queued for later execution....
static int VRPN_CALLBACK handle_update(void *, vrpn_HANDLERPARAM)
Passes arguments to handleUpdate() for this type; registered in postBindCleanup();.
vrpn_int32 d_assumeSerializer_type
Sent by a new serializer once it has been notified that its request has been granted.
vrpn_LamportClock * d_lClock
static int VRPN_CALLBACK handle_requestSerializer(void *, vrpn_HANDLERPARAM)
vrpn_LamportTimestamp * d_lastLamportUpdate
vrpn_SharedObject(const char *name, const char *tname, vrpn_int32 mode)
vrpn_bool d_isSerializer
default to vrpn_TRUE for servers, FALSE for remotes
void remotePostBindCleanup(void)
vrpn_int32 d_lamportUpdate_type
static int VRPN_CALLBACK handle_assumeSerializer(void *, vrpn_HANDLERPARAM)
vrpn_Connection * d_connection
virtual int handleUpdate(vrpn_HANDLERPARAM)=0
int yankDeferredUpdateCallbacks(void)
returns -1 on error (i.e. nonzero return by a callback)
virtual vrpn_bool shouldSendUpdate(vrpn_bool isLocalSet, vrpn_bool acceptedUpdate)
void useLamportClock(vrpn_LamportClock *)
Lamport Clocks are NOT currently integrated. They should provide serialization (virtual timestamps) t...
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
static int VRPN_CALLBACK handle_gotConnection(void *, vrpn_HANDLERPARAM)
Register this handler in postBindCleanup(); it calls sendUpdate() to make sure the remote has the cor...
vrpn_int32 d_requestSerializer_type
Sent to the serializer to assume its duties.
vrpn_Shared_String_Remote & operator=(const char *)
vrpn_Shared_String_Remote(const char *name, const char *defaultValue=NULL, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
vrpn_Shared_String_Server & operator=(const char *)
vrpn_Shared_String_Server(const char *name, const char *defaultValue=NULL, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
static int VRPN_CALLBACK handle_lamportUpdate(void *, vrpn_HANDLERPARAM)
int handleUpdate(vrpn_HANDLERPARAM)
void decode(const char **buffer, vrpn_int32 *len, char *newValue, timeval *when) const
timedCallbackEntry * d_timedCallbacks
void setSerializerPolicy(vrpn_SerializerPolicy policy=vrpn_ACCEPT, vrpnSharedStringSerializerPolicy f=NULL, void *userdata=NULL)
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
vrpn_Shared_String(const char *name, const char *defaultValue=NULL, vrpn_int32 mode=VRPN_SO_DEFAULT)
callbackEntry * d_callbacks
virtual vrpn_Shared_String & set(const char *newValue, timeval when)
int yankCallbacks(vrpn_bool isLocal)
vrpn_Shared_String & operator=(const char *newValue)
vrpn_SerializerPolicy d_policy
void encode(char **buffer, vrpn_int32 *len, const char *newValue, timeval when) const
void unregister_handler(vrpnSharedStringCallback, void *)
const char * value(void) const
vrpn_bool register_handler(vrpnSharedStringCallback, void *)
vrpnSharedStringSerializerPolicy d_policyCallback
virtual vrpn_bool shouldAcceptUpdate(const char *newValue, timeval when, vrpn_bool isLocalSet)
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
vrpn_Shared_float64_Remote(const char *name, vrpn_float64 defaultValue=0, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
vrpn_Shared_float64_Remote & operator=(vrpn_float64 newValue)
vrpn_Shared_float64_Server(const char *name, vrpn_float64 defaultValue=0, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
vrpn_Shared_float64_Server & operator=(vrpn_float64 newValue)
void setSerializerPolicy(vrpn_SerializerPolicy policy=vrpn_ACCEPT, vrpnSharedFloatSerializerPolicy f=NULL, void *userdata=NULL)
vrpn_Shared_float64(const char *name, vrpn_float64 defaultValue=0.0, vrpn_int32 mode=VRPN_SO_DEFAULT)
vrpn_SerializerPolicy d_policy
vrpn_Shared_float64 & operator=(vrpn_float64 newValue)
int yankCallbacks(vrpn_bool isLocal)
callbackEntry * d_callbacks
void unregister_handler(vrpnSharedFloatCallback, void *)
int handleUpdate(vrpn_HANDLERPARAM)
vrpnSharedFloatSerializerPolicy d_policyCallback
vrpn_float64 value(void) const
static int VRPN_CALLBACK handle_lamportUpdate(void *, vrpn_HANDLERPARAM)
timedCallbackEntry * d_timedCallbacks
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
virtual vrpn_bool shouldAcceptUpdate(vrpn_float64 newValue, timeval when, vrpn_bool isLocalSet)
void encode(char **buffer, vrpn_int32 *len, vrpn_float64 newValue, timeval when) const
void decode(const char **buffer, vrpn_int32 *len, vrpn_float64 *newValue, timeval *when) const
void register_handler(vrpnSharedFloatCallback, void *)
virtual vrpn_Shared_float64 & set(vrpn_float64 newValue, timeval when)
vrpn_Shared_int32_Remote(const char *name, vrpn_int32 defaultValue=0, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
vrpn_Shared_int32_Remote & operator=(vrpn_int32 newValue)
vrpn_Shared_int32_Server & operator=(vrpn_int32 newValue)
vrpn_Shared_int32_Server(const char *name, vrpn_int32 defaultValue=0, vrpn_int32 defaultMode=VRPN_SO_DEFAULT)
virtual void bindConnection(vrpn_Connection *)
Every derived class should call this, do what it needs to, and ALSO call {server,remote}...
static int VRPN_CALLBACK handle_lamportUpdate(void *, vrpn_HANDLERPARAM)
vrpn_bool register_handler(vrpnSharedIntCallback, void *)
callbackEntry * d_callbacks
vrpn_SerializerPolicy d_policy
void decodeLamport(const char **buffer, vrpn_int32 *len, vrpn_int32 *newValue, timeval *when, vrpn_LamportTimestamp **t) const
void encodeLamport(char **buffer, vrpn_int32 *len, vrpn_int32 newValue, timeval when, vrpn_LamportTimestamp *t) const
void decode(const char **buffer, vrpn_int32 *len, vrpn_int32 *newValue, timeval *when) const
vrpn_Shared_int32 & set(vrpn_int32 newValue, timeval when)
vrpn_int32 value(void) const
vrpnSharedIntSerializerPolicy d_policyCallback
vrpn_Shared_int32(const char *name, vrpn_int32 defaultValue=0, vrpn_int32 mode=VRPN_SO_DEFAULT)
int yankCallbacks(vrpn_bool isLocal)
virtual void sendUpdate(void)
Should invoke default sendUpdate() for this derived type.
virtual vrpn_bool shouldAcceptUpdate(vrpn_int32 newValue, timeval when, vrpn_bool isLocalSet, vrpn_LamportTimestamp *)
void unregister_handler(vrpnSharedIntCallback, void *)
int handleUpdate(vrpn_HANDLERPARAM)
vrpn_Shared_int32 & operator=(vrpn_int32 newValue)
void encode(char **buffer, vrpn_int32 *len, vrpn_int32 newValue, timeval when) const
timedCallbackEntry * d_timedCallbacks
void setSerializerPolicy(vrpn_SerializerPolicy policy=vrpn_ACCEPT, vrpnSharedIntSerializerPolicy f=NULL, void *userdata=NULL)
This structure is what is passed to a vrpn_Connection message callback.
deferredUpdateCallbackEntry * next
vrpnDeferredUpdateCallback handler
vrpnSharedStringCallback handler
vrpnTimedSharedStringCallback handler
timedCallbackEntry * next
vrpnSharedFloatCallback handler
timedCallbackEntry * next
vrpnTimedSharedFloatCallback handler
vrpnSharedIntCallback handler
timedCallbackEntry * next
vrpnTimedSharedIntCallback handler
int(VRPN_CALLBACK * vrpnTimedSharedStringCallback)(void *userdata, const char *newValue, timeval when, vrpn_bool isLocal)
int(VRPN_CALLBACK * vrpnTimedSharedFloatCallback)(void *userdata, vrpn_float64 newValue, timeval when, vrpn_bool isLocal)
int(VRPN_CALLBACK * vrpnSharedStringCallback)(void *userdata, const char *newValue, vrpn_bool isLocal)
int(VRPN_CALLBACK * vrpnDeferredUpdateCallback)(void *userdata)
int(VRPN_CALLBACK * vrpnSharedFloatCallback)(void *userdata, vrpn_float64 newValue, vrpn_bool isLocal)
class VRPN_API vrpn_Shared_float64
int(VRPN_CALLBACK * vrpnSharedStringSerializerPolicy)(void *userdata, const char *newValue, timeval when, vrpn_Shared_String *object)
int(VRPN_CALLBACK * vrpnSharedIntCallback)(void *userdata, vrpn_int32 newValue, vrpn_bool isLocal)
int(VRPN_CALLBACK * vrpnSharedFloatSerializerPolicy)(void *userdata, vrpn_float64 newValue, timeval when, vrpn_Shared_float64 *object)
class VRPN_API vrpn_LamportClock
class VRPN_API vrpn_Shared_String
int(VRPN_CALLBACK * vrpnTimedSharedIntCallback)(void *userdata, vrpn_int32 newValue, timeval when, vrpn_bool isLocal)
class VRPN_API vrpn_LamportTimestamp
class VRPN_API vrpn_Connection
int(VRPN_CALLBACK * vrpnSharedIntSerializerPolicy)(void *userdata, vrpn_int32 newValue, timeval when, vrpn_Shared_int32 *object)
class VRPN_API vrpn_Shared_int32