39 namespace connection {
42 const char *vrpnPing() {
return "vrpn_Base ping_message"; }
47 case VRPN_LOCAL_ONLY: {
48 m_initConnection(
"localhost");
56 m_initConnection(
"loopback:");
63 boost::optional<std::string const &> iface, boost::optional<int> port) {
64 int myPort = port.get_value_or(0);
65 if (iface && !(iface->empty())) {
66 m_initConnection(iface->c_str(), myPort);
68 m_initConnection(
nullptr, myPort);
72 void VrpnBasedConnection::m_initConnection(
const char iface[],
int port) {
73 if (!m_network.
isUp()) {
74 OSVR_DEV_VERBOSE(
"Network error: " << m_network.
getError());
75 throw std::runtime_error(m_network.
getError());
78 port = vrpn_DEFAULT_LISTEN_PORT_NO;
80 m_vrpnConnection = vrpn_ConnectionPtr::create_server_connection(
81 port,
nullptr,
nullptr, iface);
85 VrpnBasedConnection::m_registerMessageType(std::string
const &messageId) {
86 MessageTypePtr ret(
new VrpnMessageType(messageId, m_vrpnConnection));
91 VrpnBasedConnection::m_createConnectionDevice(DeviceInitObject &init) {
93 make_shared<VrpnConnectionDevice>(init, m_vrpnConnection);
97 void VrpnBasedConnection::m_registerConnectionHandler(
98 std::function<
void()> handler) {
99 if (m_connectionHandlers.empty()) {
101 m_vrpnConnection->register_handler(
102 m_vrpnConnection->register_message_type(vrpn_got_connection),
103 &m_connectionHandler,
static_cast<void *
>(
this),
107 m_vrpnConnection->register_handler(
108 m_vrpnConnection->register_message_type(messageid::vrpnPing()),
109 &m_connectionHandler,
static_cast<void *
>(
this),
113 m_connectionHandlers.push_back(handler);
116 int VrpnBasedConnection::m_connectionHandler(
void *userdata,
120 for (
auto const &f : conn->m_connectionHandlers) {
125 void VrpnBasedConnection::m_process() {
127 m_vrpnConnection->mainloop();
135 return static_cast<void *
>(m_vrpnConnection.get());
139 return getVRPNConnectionKindID();
VrpnBasedConnection(ConnectionType type)
Constructor for the VRPN connection.
virtual ~VrpnBasedConnection()
std::string const & getError() const
Get error message, if any.
unique_ptr< MessageType > MessageTypePtr
a uniquely-owned handle for holding a message type registration.
virtual const char * getConnectionKindID()
Returns some implementation-defined string based on the dynamic type of the connection.
shared_ptr< ConnectionDevice > ConnectionDevicePtr
How to hold on to a ConnectionDevice.
Internal, configured header file for verbosity macros.
virtual void * getUnderlyingObject()
Returns the vrpn_Connection pointer.
bool isUp() const
Get whether the networking system is successfully "up".