Ejemplo n.º 1
0
 static vrpn_ConnectionPtr
 getVRPNConnection(connection::ConnectionPtr const &conn) {
     vrpn_ConnectionPtr ret;
     if (std::string(conn->getConnectionKindID()) ==
         osvr::connection::getVRPNConnectionKindID()) {
         ret = vrpn_ConnectionPtr(
             static_cast<vrpn_Connection *>(conn->getUnderlyingObject()));
     }
     return ret;
 }
Ejemplo n.º 2
0
OSVR_ReturnCode
osvrAnalysisSyncInit(OSVR_IN_PTR OSVR_PluginRegContext ctx,
                     OSVR_IN_STRZ const char *name,
                     OSVR_IN_PTR OSVR_DeviceInitOptions options,
                     OSVR_OUT_PTR OSVR_DeviceToken *device,
                     OSVR_OUT_PTR OSVR_ClientContext *clientCtx) {
    if (!ctx) {
        OSVR_DEV_VERBOSE("osvrAnalysisSyncInit: can't use a null plugin "
                         "registration context.");
        return OSVR_RETURN_FAILURE;
    }
    if (!name || !(name[0])) {
        OSVR_DEV_VERBOSE(
            "osvrAnalysisSyncInit: can't use a null or empty device name.");
        return OSVR_RETURN_FAILURE;
    }
    OSVR_VALIDATE_OUTPUT_PTR(device, "device token");
    OSVR_VALIDATE_OUTPUT_PTR(clientCtx, "client context");

    auto initialResult =
        osvrDeviceSyncInitWithOptions(ctx, name, options, device);
    if (initialResult == OSVR_RETURN_FAILURE) {
        OSVR_DEV_VERBOSE(
            "osvrAnalysisSyncInit: couldn't create initial device token.");
        return OSVR_RETURN_FAILURE;
    }

    /// Dig the VRPN connection out of the server.
    auto osvrConn = osvr::connection::Connection::retrieveConnection(
        osvr::pluginhost::PluginSpecificRegistrationContext::get(ctx)
            .getParent());
    auto vrpnConn = extractVrpnConnection(*osvrConn);

    /// Create a client context here

    /// @todo Use an interface factory that handles relative paths.
    auto clientCtxSmart = osvr::common::wrapSharedContext(
        osvr::client::createAnalysisClientContext(
            "org.osvr.analysisplugin" /**< @todo */, "localhost" /**< @todo */,
            vrpn_ConnectionPtr(vrpnConn)));
    auto &dev = **device;
    /// pass ownership
    dev.acquireObject(clientCtxSmart);

    /// register client context update
    dev.setPreConnectionInteract([=] { clientCtxSmart->update(); });

    /// finally return the client context too.
    *clientCtx = clientCtxSmart.get();
    return OSVR_RETURN_SUCCESS;
}