客户端上下文对象:在应用程序中创建并保存。
用于管理生命周期以及访问ClientKit功能函数。
在Context_decl.h的第57行声明。
构造函数:
osvr::clientkit::ClientContext::ClientContext(const char applicationIdentifier[], uint32_t flags = 0u)
@brief:对库初始化
@applicationIdentifier:给应用程序取的标识名。推荐使用反向域名格式,比如
(osvr::clientkit::ClientContext context("com.osvr.exampleclients.Imaging");)
@flags :初始化选项(保留,可选)
在Context.h第45行定义。
osvr::clientkit::ClientContext::ClientContext(OSVR_ClientContext context)
@brief:使用存在的context初始化当前context
@note:ClientContext类将占有该context
在Context.h第49行定义。
成员函数:
Interface svr::clientkit::ClientContext::getInterface(const std::string &path)
@brief:获取与指定路径关联的接口
@returns:返回接口对象
在Context.h第61行定义。
std::string osvr::clientkit::ClientContext::getStringParameter(const std::string &path)
@brief:从给定路径获取字符串
@path:给定路径
@returns:字符串值或者空值(如果给定路径不存在或者不是一个字符串时)
在Context.h第74行定义。
bool osvr::clientkit::ClientContext::checkStatus() const
@brief:检查客户端上下文是否正常启动
@returns:若返回false,则可能server没有启动,或连接server超时,或者程序没有调用update()函数
在Context.h第111行定义。
void osvr::clientkit::ClientContext::log(OSVR_LogLevel severity, const char* message)
@brief:log一个消息到插件特定通道。
@severity:log信息等级。如下:
typedef enum OSVR_LogLevel {
OSVR_LOGLEVEL_TRACE = 0, //< function entry and exit, control flow.
OSVR_LOGLEVEL_DEBUG = 10, //< debug-level messages.
OSVR_LOGLEVEL_INFO = 20, //< informational messages.
OSVR_LOGLEVEL_NOTICE = 30, //< normal but significant condition.
OSVR_LOGLEVEL_WARN = 40, //< warning conditions.
OSVR_LOGLEVEL_ERROR = 50, //< error messages.
OSVR_LOGLEVEL_CRITICAL = 60, //< critical conditions.
} OSVR_LogLevel;
@message:log信息
=========================================================2017年8月8日
构造函数:
inline ClientContext::ClientContext(const char applicationIdentifier[],
uint32_t flags)
: m_context(osvrClientInit(applicationIdentifier, flags)) {}
OSVR_ClientContext osvrClientInit(const char applicationIdentifier[],
uint32_t /*flags*/) {
auto host = osvr::util::getEnvironmentVariable(HOST_ENV_VAR);
if (host.is_initialized()) {
make_clientkit_logger()->notice() << "App " << applicationIdentifier
<< ": Connecting to non-default host "
<< *host;
return ::osvr::client::createContext(applicationIdentifier,
host->c_str());
}
make_clientkit_logger()->debug("Connecting to default (local) host");
return ::osvr::client::createContext(applicationIdentifier);
}
static const char HOST_ENV_VAR[] = "OSVR_HOST";
/// A real implementation of the functionality.
boost::optional<std::string>
getEnvironmentVariable(std::string const &var) {
boost::optional<std::string> ret;
auto initialRet = std::getenv(var.c_str());
if (nullptr == initialRet) {
return ret;
}
std::string val(initialRet);
#ifdef OSVR_WINDOWS
// Windows doesn't distinguish between empty and not defined, so assume
// empty means not defined.
if (val.empty()) {
return ret;
}
#endif
ret = val;
return ret;
}
最终是创建一个上下文,传入appID:
common::ClientContext * osvr::client::createContext (const char appId[], const char host[]="localhost")