Bit_BatchBegin
BIT_STATUS Bit_BatchBegin(
BIT_HANDLE handle,
BIT_UINT32 mode)
开启批量Query模式,调用此API后调用的所有Query相关API,全部由Bit_BatchEnd接口批量提交连接集团服务。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- mode - [IN] 批量请求的行为模式。
类型 | 说明 |
---|---|
BIT_BATCH_MODE_CONTINUE (0x0) | 批量提交过程中,遇到失败的接口会记录错误信息,并且继续执行 |
BIT_BATCH_MODE_BREAK (0x01) | 批量提交过程中,遇到失败的接口会记录错误信息,直接返回错误 |
Bit_BatchEnd
BIT_STATUS Bit_BatchEnd(
BIT_HANDLE handle,
BIT_UINT32 *pResultList,
BIT_UINT32 *pResultListSize)
批量提交Query请求。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- pResultList - [OUT] 按顺序返回每个接口的错误码,0表示成功,非0表示失败,传NULL表示清理添加的批量数据。
- pResultListSize - [OUT] 返回调用接口的数量。
示例
// 开启批次
Bit_BatchBegin(handle, BIT_BATCH_MODE_CONTINUE);
BIT_UINT32 result[3] = { 0 };
BIT_UINT32 resultNum = 0;
BIT_TICKET ticket = NULL;
BIT_UINT32 capacity = 0;
Bit_QueryFeature(handle, 1, &capacity);
Bit_QueryFeatureEx2(handle, "test", 0, 10, "1.0", &ticket);
// 批量提交
Bit_BatchEnd(handle, result,& resultNum) ;
if (result[0] == BIT_SUCCESS)
{
// Bit_QueryFeature(1) success
}
if (result[1] == BIT_SUCCESS)
{
// Bit_QueryFeatureEx2 ("test") success}
}
Bit_QueryFeature
BIT_STATUS Bit_QueryFeature (
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pCapacity)
开发商可以对软件的某个功能进行单独授权,当程序运行该模块时,可以通过该接口检查是否可用。
对于单机授权:只检查特征项是否可用。
云/帐号/集团授权:调用该接口将占用一个用户数,用户数占满时,调用该接口会报错。开发商可以通过该方式来控制并发。(当客户端断开连接后,集团服务会自动释放占用的用户数)
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 特征项id。
- pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。
重复调用引用会+1,通过Bit_ReleaseFeature来减少引用,当引用减少到0时,释放占用的用户数。
示例
BIT_UINT32 featureId = 1;
BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeature(handle, featured, &capacity);
if (status == BIT_SUCCESS) {
// 特征项1有效
}
Bit_ReleaseFeature
BIT_STATUS Bit_ReleaseFeature (
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pCapacity)
释放所占用的用户数,该函数和Bit_QueryFeature一一对应。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 特征项ID。
- pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。
示例
BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeature(handle, 1, capacity);
if (status != BIT_SUCCESS) {
return;
}
// 执行业务逻辑
// 执行后,进行释放
status = Bit_ReleaseFeature(handle, 1, &capacity);
Bit_QueryFeatureEx
BIT_STATUS Bit_QueryFeatureEx (
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 mode,
BIT_UINT32 required,
BIT_UINT32 *pCapacity,
BIT_PCSTR xmlScope)
集团授权专用,该接口支持占用指定用户数,支持通过特征项版本进行检查。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 特征项ID。
- mode - [IN]
类型 | 说明 |
---|---|
BIT_QUERY_DEFAULT(0x0) | 非阻塞占用required个用户数,如果用户数不够将返回错误 |
BIT_QUERY_AVAILABLE(0x01) | 尽可能的占用required个用户数,如果用户数不够将占用剩余用户数 例如:Feature剩余10个用户数。Required需要占用20个,则返回成功,并占用10个用户数 |
BIT_QUERY_CHECK(0x02) | 获取当前session占用的用户数 |
BIT_QUERY_TEST(0x100) | 该类型可以与上面的选项组合使用,检查操作是否可以成功,但并不占用用户数 例如:(BIT_QUERY_DEFAULT| BIT_QUERY_TEST) |
- required - [IN] 请求的用户数,该接口可以调用多次,实际的占用的用户数为,每次调用的最大值。
示例:
第一次:required了10个。
第二次:required了8个,此时总共占用10个。
第三次:required了15个,此时总共占用15个。
- pCapacity - [OUT] 当不为NULL时,获取特征项当前可用用户数。
- xmlScope - [IN] 可以传入特征项版本。示例“1.0”,“2.0”,如果为空,则匹配任意版本的特征项。
示例
// 占用特征项ID为8的10个用户数:
BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_QueryFeatureEx (
handle,
8,
BIT_QUERY_DEFAULT,
10,
&capacity,
NULL);
if (status == BIT_SUCCESS) {
// 特征项“8”用户数占用成功
// 执行业务逻辑代码
}
Bit_ReleaseFeatureEx
BIT_STATUS Bit_ReleaseFeatureEx (
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 consumed,
BIT_UINT32 *pCapacity,
BIT_PCSTR xmlScope)
集团授权专用,释放指定的用户数。该接口与Bit_QueryFeatureEx对应。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 特征项ID。
- consumed - [IN] 释放指定用户数,如果为0,表示释放全部用户数。
- pCapacity - [OUT] 返回剩余用户数。
- xmlScope - [IN] 可以传入特征项版本。注意:必须与Bit_QueryFeatureEx的输入的版本一致,才可以释放。
示例
// 释放占用特征项ID为8的2个用户数:
BIT_UINT32 capacity = 0;
BIT_STATUS status = Bit_ReleaseFeatureEx (
handle,
8,
2,
&capacity,
NULL)
if (status == BIT_SUCCESS) {
// 用户数释放成功
}
Bit_QueryFeatureEx2
BIT_STATUS Bit_QueryFeatureEx2 (
BIT_HANDLE handle,
BIT_PCSTR featureName,
BIT_UINT32 mode,
BIT_UINT32 required,
BIT_PCSTR xmlScope,
BIT_TICKET *pTicket)
可以使用“特征项名称 + 特征项版本”进行用户数占用,支持队列模式。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureName - [IN] 特征项名称。
- mode - [IN]
类型 | 说明 |
---|---|
BIT_QUERY_DEFAULT**(0x0)** | 非阻塞占用required个用户数,如果用户数不够将返回错误 |
BIT_QUERY_AVAILABLE(0x01) | 尽可能的占用required个用户数,如果用户数不够将占用剩余用户数。 例如:Feature剩余10个用户数。Required需要占用20个,则返回成功,并占用10个用户数。 |
BIT_QUERY_WAIT(0x03) | 加入等待队列,可以设置超时,超时后,将自动返回 |
BIT_QUERY_QUEUE(0x04) | 加入队列,通过Bit_GetTicketInfo可以查看队列状态 |
BIT_QUERY_SHARED_USERS(0x200) | User用户数共享。 默认情况下调用该接口的用户数是不共享的,即:第一次QueryFeatureEx2了10个用户数,第二次QueryFeatureEx2了10个用户数,总共占用20个用户数。 当设置了该属性,如果两次QueryFeature的特征项名称、版本都一致,则用户数是可以合并的,例如:两次各QueryFeatureEx2了10个用户数,则总共占用10用户数。 |
BIT_QUERY_SERVICE_RANDOM(0x400) | IP随机。 该模式需要与Login的LOGIN_MODE_CREATE_HANDLE_ONLY配合使用。 设置了该模式后,当Login的handle没有登录过,则在连接服务器时会随机轮询IP。 默认情况下,客户端会按配置的IP顺序挨个查找,设置了该模式会随机轮询,从而减少排在前面的IP负载。 |
BIT_QUERY_USE_ID(0x800) | 使用featureId占用feature。 设置了该模式后,featureName参数必须传入纯数字的字符串,例如“1”,客户端会将该字符串转化为featureId发送给服务端来占用featureId为1的feature。 |
- required - [IN] 请求的用户数。
- xmlScope - [IN] 可以传入特征项版本。示例:“1.0”,“2.1”。
- pTicket - [OUT]
示例
// 占用特征项A 1.0版本,5个用户数:
BIT_TICKET ticket = NULL;
BIT_STATUS status = Bit_QueryFeatureEx2 (
handle,
“特征项A”,
BIT_QUERY_DEFAULT,
5,
“1.0” ,
&ticket);
If (status == BIT_SUCCESS) {
// 占用成功,执行业务逻辑
}
Bit_ReleaseFeatureEx2
BIT_STATUS Bit_ReleaseFeatureEx2 (
BIT_TICKET ticket,
BIT_UINT32 consumed)
释放ticket所占用的用户数。该函数和Bit_QueryFeatureEx2一一对应。
参数
- ticket - [IN] 通过QueryFeatureEx2返回的句柄。
- consumed - [IN] 保留值,必须是0。
示例
BIT_STATUS status = Bit_ReleaseFeatureEx2 (ticket, 0);
if (status == BIT_SUCCESS) {
// 释放ticket占用的用户数
}
特征项Query相关接口比较
函数 | 特征项ID | 特征项名称 | 特征项版本 | 一次Query多个用户数 | 队列 | 用户数递增/递减 |
---|---|---|---|---|---|---|
Bit_QueryFeature | 支持 | |||||
Bit_QueryFeatureEx | 支持 | 支持 | 支持 | 支持 | ||
Bit_QueryFeatureEx2 | 支持 | 支持 | 支持 | 支持 |
Bit_GetFeatureInfo2
BIT_STATUS Bit_GetFeatureInfo2 (
BIT_HANDLE handle,
BIT_PCSTR featureName,
BIT_PCSTR xmlScope,
BIT_INT32 *pExpired)
检查特征项是否存在,不会占用授权码或特征项的用户数,获取特征项的剩余有效期。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureName - [IN] 产品的特征项名称。
- xmlScope - [IN] 查找范围,可以通过 xml 格式传入版本,也可以直接传入版本的字符串。
<scope>
<featureVersion>1.1</featureVersion>
</scope>
或者直接输入:"1.1"
- pExpired - [OUT] 返回该特征项的剩余有效期,正数代表剩余有效期,负数代表过期天数,36500代表永久有效。
Bit_GetFeatureInfoEx2
BIT_STATUS BIT Bit_GetFeatureInfoEx2(
BIT_HANDLE handle,
BIT_PCSTR featureName,
BIT_PCSTR xmlScope,
BIT_CHAR *pFeatureInfo,
BIT_UINT32 *pFeatureInfoSize);
获取指定feature的信息,以XML格式返回。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureName - [IN] 产品的特征项名称。
- xmlScope - [IN] 查找范围,可以通过 xml 格式传入版本,也可以直接传入版本的字符串。
<scope>
<featureVersion>1.1</featureVersion>
</scope>
或者直接输入:"1.1"
- pFeatureInfo - [OUT] feature信息存储区地址。
- pFeatureInfoSize - [IN/OUT] 会话存储区大小。
Bit_GetTicketInfo
BIT_STATUS BIT_CALLCONV Bit_GetTicketInfo(
BIT_TICKET ticket,
BIT_UINT32 type,
BIT_CHAR *pXmlInfo,
BIT_UINT32 *pSize)
获取ticket信息。
参数
-
ticket - [IN] Bit_QueryFeatureEx2产生的句柄。
-
type - [IN] 类型。
- BIT_TICKET_TYPE_USERS(0x1) - 获取ticket占用的用户数。
- BIT_TICKET_TYPE_CHECK(0x2) - 检查当前ticket的状态。
- BIT_TICKET_TYPE_INFO(0x3) - 获取当前ticket的信息。
-
pXmlInfo - [OUT] ticket信息存储区地址。
-
pSize - [IN/OUT] 输入时为存储区长度,输出时为返回信息的长度。
BIT_TICKET_TYPE_INFO返回的xml信息如下
<?xml version="1.0" encoding="UTF-8"?>
<ticketInfo>
<requestInfo>
<fId>1</fId> // 请求feature的id
<fName>test</fName> // 请求feature的名称
<requestUserNumber>10</requestUserNumber> // 请求feature的点数
<requestFversion>1.0</requestFversion> // 请求feature的版本
</requestInfo>
<occupationInfos>
<occupationInfo>
<snInfo>
<sn>4HAYJUOA7I******</sn> // 占用的是那个sn下的feature
<controlType>Local/group</controlType> // 占用的feature类型
<snInfo/>
<occFversion>1.0</occFversion> // 占用feature的版本
<occUserNumber>3</occUserNumber> // 占用feature的点数
</occupationInfo>
<occupationInfo>
<snInfo>
<sn>4HAYJUOA7IAADUAB</sn> // 占用的是那个sn下的feature
<controlType>Local/group</controlType> // 占用的feature类型
<snInfo/>
<occFversion>2.0</occFversion> // 占用feature的版本
<occUserNumber>7</occUserNumber> // 占用feature的点数
</occupationInfo>
</occupationInfos>
</ticketInfo>
Bit_ConvertFeature
BIT_STATUS BIT_CALLCONV Bit_ConvertFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 para1,
BIT_UINT32 para2,
BIT_UINT32 para3,
BIT_UINT32 para4,
BIT_UINT32 *pResult);
使用“算法”类型的特征项对输入参数进行变换操作,得到唯一对应的4字节结果。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 产品的特征项ID。
- para1 - [IN] 变换输入因子1。
- para2 - [IN] 变换输入因子2。
- para3 - [IN] 变换输入因子3。
- para4 - [IN] 变换输入因子4。
- pResult - [OUT] 变换结果。
示例
BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UINT32 par1 = 0x1234;
BIT_UINT32 par2 = 0x2234;
BIT_UINT32 par3 = 0x3234;
BIT_UINT32 par4 = 0x4234;
BIT_UINT32 convertResult;
BIT_STATUS status = Bit_ConvertFeature(handle, featureId, par1, par2, par3, par4, &convertResult);
Bit_EncryptFeature
BIT_STATUS BIT_CALLCONV Bit_EncryptFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_VOID *pPlainBuffer,
BIT_VOID *pCipherBuffer,
BIT_UINT32 dataBufferSize);
使用“密钥”类型的特征项对输入的明文进行加密,返回密文结果。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 产品的特征项ID。
- pPlainBuffer - [IN] 数据缓存区地址,用于存储明文数据。
- pCipherBuffer - [OUT] 数据缓存区地址,用于存储密文数据。
- bufferSize - [IN] 数据长度,最大长度为256字节。
示例
BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UCHAR plainbuffer[256] = "this is plain data";
BIT_UCHAR cipherbuffer[256] = { 0 };
BIT_UINT32 dataLen = strlen(plainbuffer);
BIT_STATUS status = Bit_EncryptFeature(handle, featureId, plainbuffer, cipherbuffer, dataLen);
Bit_DecryptFeature
BIT_STATUS BIT_CALLCONV Bit_DecryptFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_VOID *pCipherBuffer,
BIT_VOID *pPlainBuffer,
BIT_UINT32 dataBufferSize);
使用“密钥”类型的特征项对输入的密文进行解密,返回明文结果。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 产品的特征项ID。
- pCipherBuffer - [IN] 数据缓存区地址,用于存储密文数据。
- pPlainBuffer - [OUT] 数据缓存区地址,用于存储明文数据。
- bufferSize - [IN] 数据长度,最大长度为256字节。
示例
BIT_HANDLE handle = xx,
BIT_UINT32 featureId = xx;
BIT_UCHAR plainbuffer[256] = { 0 };
BIT_UCHAR cipherbuffer[256] ="xxxxxxxxx";
BIT_UINT32 dataLen = 16;
BIT_STATUS status = Bit_DecryptFeature(handle, featureId, cipherbuffer, plainbuffer, dataLen);
Bit_ReadFeature
BIT_STATUS BIT_CALLCONV Bit_ReadFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 *pFeatureValue);
读取特征项的数据内容,可用于“只读”和“读写”特征类型。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 产品的特征项ID。
- pFeatureValue - [OUT] 特征项数据缓存区地址,用于存储读出的数据。
Bit_WriteFeature
BIT_STATUS BIT_CALLCONV Bit_WriteFeature(
BIT_HANDLE handle,
BIT_UINT32 featureId,
BIT_UINT32 featureValue);
更新“读写”类型的特征项的数据内容。
参数
- handle - [IN] 通过Login函数返回的上下文句柄。
- featureId - [IN] 产品的特征项ID。
- featureValue - [IN] 特征项数据值。