向日葵SDK文档
更新日期:2021-05-20 13:57:14
概述 SLAPI是贝锐有限公司开发的一套基于产品向日葵的开发库,该库可以实现以点对点为通讯方式的远程桌面、远程文件、远程开机以及用户自定义的远程数据通讯。使用该开发库时,开发者无须关心点到点之间的通讯细节,以及通讯方式。SLAPI会以P2P或服务器中转等方式为通讯提供可靠的数据传输服务。
开发者账号 使用SLAPI之前,你需要先拥有一个贝锐帐户,可以通过https:www.oray.com的右上角的注册按钮进行注册。如图:
拥有帐户后,进入http://open.oray.com(开放平台的网址),进入开发者认证页面,填写必要资料并提交开发者申请。如图:
注册后,进入我的应用页面创建应用,创建成功后,在应用详情中看到自己的APP ID 和 APP KEY,有了这两个信息,就可以使用SLAPI来开发自己的应用了。如图:
支持平台 目前SLAPI支持Window,Linux,Mac系列平台,而其他系统平台也将会尽快推出。
支持语言 目前SLAPI以纯C加二进制库实现方式提供接口,只要你的开发环境可以调用C函数即可。
模型 通常情况下开发出的应用会是2个APP,一个主控制端,一个被控制端,当然为了主控端得到被控端的连接信息,你可能会需要第三个自行开发的应用充当中间人的角色来传递连接信息。以下为一个完整应用的拓扑图:
主控与被控是两个大的对象,在它们内部维护了很多会话,这些会话可以动态的创建与销毁,每个会话都有各自特殊的功能,如图:Desktop会话可以实现主控与被控之间的远程桌面,File会话可以实现远程文件功能。
“你的服务器”用来传递被控端的连接信息与会话信息,让主控制端可以与被控制端进行通讯。
而“OrayServer”则默默的在背后为你的应用程序提供必要的通讯服务,保证你应用的数据传输。
使用规范
目录结构 在开发库下你可以看到以下目录include、lib、bin、doc、samples。
include目录:所有SLAPI使用的API头文件,目前只有slsdk.h文件,用户只需要包含该文件即可使用SLAPI所有功能
bin目录:放有SLAPI运行时库,Windows下为slsdk.dll文件,运行时请将它放到运行程序所在的目录。放有SLAPI编译所需要的链接库,Windows下为slsdk.lib,编译时请链接该库
doc目录:所有SLAPI的使用说明与相关文档
samples目录:所有SLAPI应用实例
使用开发库分为三个阶段,1:环境初始化,2:创建主/被控制端,3:创建会话。
- 环境初始化 使用SLInitialize函数初始化SLAPI环境。同样在进程退出前请调用SLUninitialize函数退出并析构整个环境。
另外在整个生命期中,可以使用SLGetLastError函数来获取当前的错误代码,方便你调试自己的应用程序,也可以使用SLSetLastError函数来设置当前的错误代码。最后,可以使用SLGetErrorDesc函数将错误代码转化为文本信息,方便查看。
- 创建被控制端 使用SLCreateClient函数创建被控制端,然后使用SLSetClientCallback函数设置被控制端的事件回调函数,这样就可以获取控制端的状态和事件信息。
使用SLClientLogin函数来登录到贝锐服务器,登录成功后利用SLGetClientAddress函数来获取被控制端的连接信息,使用此信息主控端就可以与被控制端通讯了。注意:当回调事件为SLCLIENT_EVENT_ONLOGIN时,才算登录成功。
当不再使用这个被控制端时,可以使用SLDestroyClient函数将其销毁。
- 创建主控制端 使用SLCreateRemote函数创建主控制端。
使用SLDestroyRemote函数销毁主控制端
- 创建被控制端会话 当被控制端创建完后,就可以创建会话了,每种功能的会话都有固定的API来创建,如SLCreateClientSession函数用来创建远程桌面的会话,所有创建后的会话,都可以使用SLDestroyClientSession函数来销毁。
被控制端创建的所有会话都有一个会话序列号(字符串形式),使用该序列号,主控制端就可以连接指定会话了,这个序列号可以使用SLGetSessionName函数来获取。
最后所有的会话在API中都定义为SLSESSION类型,主控制端也是如此。
注意:被控端会话只能使用一次,一旦被主控端连接该会话后就失效,不能再连接。请销毁后再创建新的使用。被控端会话可以同时创建多个
- 创建主控制端会话 当主控制端创建完后,就可以创建会话了,每种功能的会话都有固定的API来创建,如SLCreateRemoteSession函数用来创建远程桌面的会话,该函数创建的会话用来和被控制端使用SLCreateClientSession创建出来的会话对接并通讯。
主控制端创建会话与被控制端创建会话略有不同,它需要提供被控制端的连接信息和会话序列号信息,这两个信息可以使用上面所提到的SLGetClientAddress函数和SLGetSessionName函数来获取。
快速集成 集成的大致流程如下图所示。如果远程只是软件产品的一小部分,可直接在发起远程的时候顺序调用上述API,而不必在程序初始化阶段就调用登录的API(这样做相当于是与服务器保持长连接,Demo示例为此模式),建议是在需要远程的时候登录,断开远程的时候销毁。
WEB 服务 当开启了web服务后,可以用websocket连接进来控制或获取被控端的状态。
协议说明 Web服务传输协议用的是json格式数据包。每个json数据包里都应该包含id和name字段。Id是一个不重复的整形,name是调用的方法名。
例子:
{
“id” : 1, //包id“name” : “newsession” //方法名,newsession为创建一个新的远程会话
“type” : type //会话类型
} 如果调用的方法有附带参数,要把参数放在data字段下。
例子:
{
“id” : 2, //包id“name” : “destroysession”, //方法名,destroysession为销毁会话
“data” : {
“sessionid” : 1 //销毁sessionid等于1的会话
}
} 服务端收到请求数据后,返回请求的id、name以及处理结果code,code等于0表示成功,其他值参考SLGetLastError的返回值
例子:
{
“id” : 1, //包id“name” : “newsession”, //方法名,newsession为创建一个新的远程桌面会话
“code” : 0, //操作结果,0表示成功
“data” : {
“sessionid” : 0 //sessionid
“address” : “xxxxxx” //服务器地址
“sessionname” : “xxxxxx” //session
}
} 客户端接收到返回值后,应该判断id是否为发出请求的id,确保正确的收到返回结果。
- Web 服务提供的方法 Web每一次发送请求都会得到对应请求操作的执行结果,即一问一答;对于特定的事件,服务器内部会创建额外的监听,当状态发生改变,会主动以事件通知的形式推送给客户端。为了保证Web多连接的同步,服务器的被动响应和主动通知都采用广播的形式,一旦外部操作或内部变化,所有的连接都能及时收到同一通知。
下表1-7为web的请求方式及返回说明,8为服务器主动通知事件,9为会话回调通知。
1.OPENID登录
name: ”login_openid”
参数:
openid:开发者的ID号openkey:开发者ID对应的验证码
例子:
{
“id” : 1,“name” : “login_openid”,
“data” : {
“openid” : “xxxxxx”,
“openkey” : “xxxxxx”
}
}
返回:
{
“id” : 1,“name” : “login\_openid”,
“data” : “”,
“code” : 0 //参考10.错误代码
}
2.License登录
name: ”login\_license”参数:
address:服务器地址
license:服务器license
例子:
{
“id” : 1,
“name” : “login\_license”,
“data” : {
“address” : “xxxxxx”,
“license” : “xxxxxx”
}
}
返回:
{
“id” : 1,
“name” : “login\_license”,
“data” : “”,
“code” : 0 //参考10.错误代码
}
3.注销
name: ”logout”例子:
{
“id” : 2,
“name” : “logout”,
}
返回:
{
“id” : 2,
“name” : “logout”,
“code” : 0 //参考10.错误代码
}
4.创建远程桌面会话
name: ”newsession”例子:
{
“id” : 3,
“name” : “newsession”
“type” :0
}
返回:
{
“id” : 3,
“name” : “newsession”,
“code” : 0, //参考10.错误代码
“data” : {
“address” : “xxxxxx”,
“sessionid” : 0,
“sessionname” : “xxxxxx”
}
}
5.销毁会话
name: ”destroysession”
参数:
sessionid: 要销毁的sessionid例子:
{
“id” : 4,“name” : “destroysession”,
“data” : {
“sessionid” : 1
}
}
返回:
{
“id” : 4,“name” : “destroysession”,
“data” : “”,
“code” : 0 //参考10.错误代码
}
6.开启远程桌面
name: ”assist”
参数:
address: 地址
session:会话
例子:
{
“id” : 5,“name” : “assist”,
“data” : {
“address” : “xxxxxx”,
“session” : ”xxxxxx”
}
}
返回:
{
“id” : 5,“name” : “assist”,
“data” : “”,
“code” : 0 //参考10.错误代码
}
7.获取当前状态
name: ”get_status”
例子:
{
“id” : 6,“name” : “get\_status”,
}
返回:
{
“id” : 6,“name” : “get\_status”,
“code” : 0, //参考10.错误代码
“data” : {
“is\_logginned” : true,
“session” : [
{
“addr” : “xxxxxx”,
“connected” : true,
“name” : “xxxxxx”,
“sessionid” : 0
}
{ .... }
...
{ ... }
] //session集合
}
}
8.事件通知
事件通知是服务端主动推送的,为了防止id重复,所以json包是不带id字段的
name: ”event”
参数:
evnet: 事件ID
例子:
{
“name” : “evnet”,“data” : {
“evnet” : 1 //参考11.被控端事件代码
}
}
注:登录会触发连接,登录成功(or失败)事件,注销会触发断开连接事件。
9.会话回调通知
当创建一个会话后,会建立一个关于此会话的回调接口,当此会话状态发生变化时,会触发此回调事件。
name: ”sessionevt”
参数:
evt: 事件ID
id: 会话ID
例子:
{
“name” : “sessionevt”,“data” : {
“evnet” : 1, //参考12.会话事件代码
“id” : 0 //会话ID
}
}
注:assist会触发其连接事件,destory和手动关闭会触发其断开连接事件。 3. 扩展 可以根据自己的需求对协议进行扩展。调用API SlSetWebServerFilter方法可以设置一个过滤方法,在过滤方法里,你可以尽情发挥。
提示:
SlWebServerSend方法可以想web客户端发送数据。
过滤方法里返回true,代表已经处理了该数据,底层将不会再处理
- API 详细说明
- SLInitialize 原型:bool SLInitialize(void);
功能:初始化正个SLAPI环境
返回:是否初始化成功
说明:在调用所有其他任何API之前调用,总之是应用程序中第一个调用的API
- SLUninitialize 原型:bool SLUninitialize(void);
功能:退出并析构整个SLAPI环境
返回:是否成功
说明:程序退出前调用,总之是应用程序中最后一个调用的API
- SLGetLastError 原型:SLERRCODE SLGetLastError(void)
功能:获取最后的错误码
返回:返回SLERRCODE错误码
说明:除了SLInitialize函数之外,任何API函数返回错误时,都可以用该API来获取失败的原因。该错误码是基于TLS的,线程上保持安全。
- SLSetLastError 原型:bool SLSetLastError(SLERRCODE errCode)
功能:设置最后的错误码
返回:是否设置成功
说明:通常情况下用户不需要使用该API来设置错误码。
- SLGetErrorDesc 原型:const char* SLGetErrorDesc(SLERRCODE errCode)
功能:获取错误码详细说明
返回:详细信息,如果错误码不存在则返回“未知错误”
- SLCreateClient 原型:SLCLIENT SLCreateClient(void)
功能:创建一个被控制端环境
返回:返回被控制端环境值,如果创建失败则返回SLCLIENT_INVAILD
说明:返回值将用于后面很多的被控制端API函数中
- SLDestroyClient 原型:bool SLDestroyClient(SLCLIENT client)
功能:销毁一个被控制端环境
参数:client 由SLCreateClient创建出来的值
返回:是否销毁成功
说明:参数必须是由SLCreateClient函数创建出来的值,否则可能产生未定义后果
- SLStartWebServer 原型:SUNLOGIN_API bool SLStartWebServer(SLCLIENT client, unsigned int nPort=0);
功能:开启web监听服务,用户可以用websocket连接进来控制或查看状态
参数:
client 由SLCreateClient创建出来的被控制端环境
nPort 要监听的端口号,默认是17801
返回:如果创建失败则返回false
说明:web监听服务的协议参考
- SLStopWebServer 原型:SUNLOGIN_API bool SLStopWebServer(SLCLIENT client);
功能:关闭web监听服务
参数:
client 由SLCreateClient创建出来的被控制端环境
返回:如果失败则返回false
- SlSetWebServerFilter 原型:SUNLOGIN_API bool SlSetWebServerFilter(SLCLIENT client,SLWEB_FILTER filter);
功能:关闭web监听服务
参数:
client 被控制端环境
filter 函数指针
返回:如果失败则返回false
- SlWebServerSend 原型:SUNLOGIN_API bool SlWebServerSend(SLCLIENT client,const void* pdata,unsigned int size);
功能:向web客户端发送数据
参数:
client 被控制端环境
data 指向数据的指针
size 数据长度
返回:如果失败则返回false
- SLSetClientCallback 原型:bool SLSetClientCallback(SLCLIENT client, SLCLIENT_CALLBACK pfnCallback, unsigned long custom)
功能:设置被控制端事件回调函数
参数:
client 由SLCreateClient创建出来的被控制端环境
pfnCallback 回调函数,当被控制端发生事件时,会通过该函数回调
cusom 用户自定义参数,回调时内部程序会将此参数一并回调
返回:是否设置成功
- SLClientLoginWithOpenID 原型:bool SLClientLoginWithOpenID(SLCLIENT client, const char* pstrOpenID, const char* pstrOpenKey, const char* pstrDomain = “”, bool bUseSSL = false)
功能:被控制端登录服务器
参数:
client 由SLCreateClient创建出来的被控制端环境
pstrOpenID 开发者的ID号
pstrOpenKey 开发者ID对应的验证码
pstrDomain OpenID登陆验证所指定的服务器的域名(可以默认)
bUseSSL 配合pstrDomain使用,是否使用SSL
返回:是否登录出错,登录错出会返回false,但返回true不代码登录成功,如果想知道登录成功,必须通过回调SLCLIENT_EVENT_ONLOGIN事件得知
说明:开发者ID和验证码获取方式可参见本文“开发者账号”段落 14. SLClientLoginWithLicense 原型:bool SLClientLoginWithLicense(SLCLIENT client, const char* szAddr, const char* szLic)
功能:被控制端登录服务器
参数:
client 由SLCreateClient创建出来的被控制端环境
szAddr 服务器地址
szLic 服务器lincese
返回:是否登录出错,登录错出会返回false,但返回true不代码登录成功,如果想知道登录成功,必须通过回调SLCLIENT_EVENT_ONLOGIN事件得知
说明:该方法是提供给购买了定制服务器的用户使用的
- SLClientIsOnLoginned 原型:bool SLClientIsOnLoginned(SLCLIENT client)
功能:被控制端是否已经登录服务器
参数:
client 由SLCreateClient创建出来的被控制端环境
返回:是否已经登录服务器
- SLCreateClientSession 原型:SLSESSION SLCreateClientSession(SLCLIENT client, ESLSessionType eType)
功能:在被控制端环境中创建一个远程会话
参数:
client 由SLCreateClient创建出来的被控制端环境
eType 会话类型
返回:会话,如果失败则返回SLSESSION_INVAILD
- SLDestroyClientSession 原型:bool SLDestroyClientSession(SLCLIENT client, SLSESSION session)
功能:销毁一个会话
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
返回:是否销毁成功
说明:session必须是由SLCreateClient***Session函数创建出来的Session值,不然可能产生未定义后果
- SLEnumClientSession 原型:unsigned int SLEnumClientSession(SLCLIENT client, SLSESSION* pSessionArray, unsigned int nArraySize)
功能:销毁一个会话
参数:
client 由SLCreateClient创建出来的被控制端环境
pSessionArray 会话数组用于返回数据
nArraySize 会话数组长度,一般填256
返回:返回了多少个会话
说明:session必须是由SLCreateClient***Session函数创建出来的Session值,不然可能产生未定义后果
- SLGetClientAddress 原型:const char* SLGetClientAddress(SLCLIENT client)
功能:获取被控制端连接地址
参数:client 由SLCreateClient创建出来的被控制端环境
返回:地址
说明:必须在收到SLCLIENT_EVENT_ONLOGIN事件后,即使用开发者账号登录成功后才能调用本API,不然返回的值将是无效值。将该返回值告诉主控端,主控端就可以和该被控制端通讯了
- SLGetClientSessionName 原型:const char* SLGetClientSessionName(SLCLIENT client, SLSESSION session)
功能:获取被控制端某个会话的值
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
返回:会话值
说明:通过该值主控制端才能使用该会话的服务
- SLClientSessionSendData 原型:unsigned long SLClientSessionSendData(SLCLIENT client, SLSESSION session, const char* lpData, unsigned long nLen)
功能:会话发送数据
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
lpData 发送的数据
nLen 发送的数据长度
返回:实际发送的字节数,返回0表示出错
说明:目前只适用于DataTrans类型的会话 22. SLClientSessionRecvData 原型:unsigned long SLClientSessionRecvData(SLCLIENT client, SLSESSION session, char* lpData, unsigned long nLen)
功能:会话接收数据
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
lpData 接收数据
nLen 准备接收的数据长度
返回:实际收到的字节数,返回0表示出错
说明:目前只适用于DataTrans类型的会话
- SLGetClientSessionOpt 原型:bool SLGetClientSessionOpt(SLCLIENT client, SLSESSION session, ESLSessionOpt eOpt, char* pOptVal, unsigned int nOptLen)
功能:获取被控制端某个会话某个属性值
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
eOpt 属性名
pOptVal 属性值
nOptLen 属性值长度
返回:是否获取成功
- SLSetClientSessionOpt 原型:bool SLSetClientSessionOpt(SLCLIENT client, SLSESSION session, ESLSessionOpt eOpt, const char* pOptVal, unsigned int nOptLen)
功能:设置被控制端某个会话某个属性值
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
eOpt 属性名
pOptVal 属性值
nOptLen 属性值长度
返回:是否设置成功
- SLCreateRemote 原型:SLREMOTE SLCreateRemote(void)
功能:创建一个控制端环境
返回:返回被控制端环境值,如果创建失败则返回SLREMOTE_INVAILD
说明:返回值将用于后面很多的主控制端API函数中
- SLDestroyRemote 原型:bool SLDestroyRemote(SLREMOTE remote)
功能:销毁一个控制端环境
参数:remote 由SLCreateRemote创建出来的主控制端环境
返回:是否销毁成功
说明:参数必须是由SLCreateRemote函数创建出来的值,否则可能产生未定义后果 27. SLSetRemoteCallback 原型:bool SLSetRemoteCallback(SLREMOTE remote, SLREMOTE_CALLBACK pfnCallback, unsigned long custom)
功能:设置主控制端事件回调函数
参数:
remote 由SLCreateRemote创建出来的主控制端环境
pfnCallback 回调函数,当被控制端发生事件时,会通过该函数回调
cusom 用户自定义参数,回调时内部程序会将此参数一并回调
返回:是否设置成功
- SLCreateRemoteSession 原型:SLSESSION SLCreateRemoteSession(SLREMOTE remote, ESLSessionType eType, const char* pstrAddress, const char* pstrSession)
功能:创建远程会话
参数:
remote 由SLCreateRemote创建出来的主控制端环境
eType 会话类型
pstrAddress 远程被控制端地址,由SLGetClientAddress函数返回的值
pstrSession 远程桌面会话名,由SLGetSessionName函数返回的值
返回:会话,如果失败则返回SLSESSION_INVALD
- SLCreateRemoteEmptySession 原型:SLSESSION SLCreateRemoteEmptySession(SLREMOTE remote, ESLSessionType eType)
功能:创建远程空会话
参数:
remote 由SLCreateRemote创建出来的主控制端环境
eType 会话类型
返回:会话,如果失败则返回SLSESSION_INVALD
说明:和SLCreateRemoteSession不同的是创建一个空会话,不进行连接,后面必须再使用SLConnectRemoteSession来连接会话
- SLConnectRemoteSession 原型:SLSESSION SLConnectRemoteSession(SLREMOTE remote, SLSESSION session, const char* pstrAddress, const char* pstrSession)
功能:连接远程空会话
参数:
remote 由SLCreateRemote创建出来的主控制端环境
pstrAddress 远程被控制端地址,由SLGetClientAddress函数返回的值
pstrSession 远程桌面会话名,由SLGetSessionName函数返回的值
返回:会话,如果失败则返回SLSESSION_INVALD
说明:只用于SLCreateRemoteEmptySession创建出来的会话
- SLDestroyRemoteSession 原型:bool SLDestroyRemoteSession(SLREMOTE remote, SLSESSION session)
功能:销毁一个会话
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 由SLCreateRemote***Session创建出来的会话值
返回:是否销毁成功
说明:session必须是由SLCreateRemote***Session函数创建出来的Session值,不然可能产生未定义后果
- SLRemoteSessionSendData 原型:unsigned long SLRemoteSessionSendData(SLCLIENT client, SLSESSION session, const char* lpData, unsigned long nLen)
功能:会话中发送数据,另一端会话会收到数据
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
lpData 发送的数据
nLen 发送的数据长度
返回:实际发送的字节数
说明:目前只适用于DataTrans类型的会话
- SLRemoteSessionRecvData 原型:unsigned long SLRemoteSessionRecvData(SLREMOTE remote, SLSESSION session, char* lpData, unsigned long nLen)
功能:会话接收数据
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
lpData 接收数据
nLen 准备接收的数据长度
返回:实际收到的字节数,返回0表示出错
说明:目前只适用于DataTrans类型的会话
- SLGetRemoteSessionOpt 原型:bool SLGetRemoteSessionOpt(SLCLIENT client, SLSESSION session, ESLSessionOpt eOpt, char* pOptVal, unsigned int nOptLen)
功能:获取主控制端某个会话某个属性值
参数:
client 由SLCreateRemote创建出来的主控制端环境
session 会话
eOpt 属性名
pOptVal 属性值
nOptLen 属性值长度
返回:是否获取成功
- SLSetRemoteSessionOpt 原型:bool SLSetRemoteSessionOpt(SLREMOTE remote, SLSESSION session, ESLSessionOpt eOpt, const char* pOptVal, unsigned int nOptLen)
功能:设置主控制端某个会话某个属性值
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
eOpt 属性名
pOptVal 属性值
nOptLen 属性值长度
返回:是否设置成功
- SLSetDesktopSessionPos 原型:bool SLSetDesktopSessionPos(SLREMOTE remote, SLSESSION session, int x,int y,int width,int height)
功能:设置远程桌面窗口的大小
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
x x坐标
y y坐标
width宽度
height高度
返回:是否设置成功
- SLSetClientProxy 原型:bool SLSetClientProxy(SLCLIENT client, const SLPROXY_INFO& proxy)
功能:设置被控端代理
参数:
client 由SLCreateClient创建出来的被控制端环境
proxy代理信息
返回:是否设置成功
- SLSetRemoteProxy 原型:bool SLSetRemoteProxy(SLREMOTE remote, const SLPROXY_INFO& proxy)
功能:设置被控端代理
参数:
remote由SLCreateRemote创建出来的主控制端环境
proxy代理信息
返回:是否设置成功
- SLSetDesktopSessionVisible 原型:bool SLSetDesktopSessionVisible( SLREMOTE remote, SLSESSION session )
功能:设置显示远程桌面
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
返回:是否设置成功
- SLGetDesktopSessionOriginSize 原型:bool SLGetDesktopSessionOriginSize( SLREMOTE remote, SLSESSION session, int* width, int* height );
功能:获取远程桌面原图大小
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
width 桌面原图宽度
height 桌面原图高度
返回:是否设置成功
- SLLoginWithOpenID 原型:bool SLLoginWithOpenID(SLCLIENT client, const char* pstrOpenID, const char* pstrOpenKey, const char* pstrDomain = “”, bool bUseSSL = false)
功能:功能同SLClientLoginWithOpenID, 简化名称
参数:
client 由SLCreateClient创建出来的被控制端环境
pstrOpenID 开发者的ID号
pstrOpenKey 开发者ID对应的验证码
pstrDomain OpenID登陆验证所指定的服务器的域名(可以默认)
bUseSSL 配合pstrDomain使用,是否使用SSL
返回:是否设置成功
- SLClientSendFile 原型:SLUINT32 SLAPI SLClientSendFile(SLCLIENT client, SLSESSION session, const wchar_t* filepath, bool resume )
功能:发送一个文件
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
filepath 发送文件的路径
resume 是否断点续传,否则重新发送文件
返回:文件id, 0代表失败
- SLClientKillFile 原型:bool SLAPI SLClientKillFile(SLCLIENT client, SLSESSION session, SLUINT32 fid )
功能:取消发送文件
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:是否成功
- SLClientGetFileName 原型:const wchar_t* SLAPI SLClientGetFileName( SLCLIENT client, SLSESSION session, SLUINT32 fid )
功能:获取文件路径名称
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:文件路径名称
- SLClientGetFileSize 原型:SLUINT64 SLAPI SLClientGetFileSize( SLCLIENT client, SLSESSION session, SLUINT32 fid )
功能:获取传输的文件大小
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:文件大小
- SLClientGetFileTransfered 原型:SLUINT64 SLAPI SLClientGetFileTransfered( SLCLIENT client, SLSESSION session, SLUINT32 fid )
功能:获取文件已传输的大小
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:文件已传输的大小
- SLClientFileIsTransfering 原型:bool SLAPI SLClientFileIsTransfering( SLCLIENT client, SLSESSION session, SLUINT32 fid )
功能:文件是否正在传输中
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:true 正在传输,false 其他状态
- SLClientFileIsDone 原型:bool SLAPI SLClientFileIsDone( SLCLIENT client, SLSESSION session, SLUINT32 fid );
功能:文件传输是否完成
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:true 传输完成 false 其他状态
- SLClientFileIsKilled 原型:bool SLAPI SLClientFileIsKilled( SLCLIENT client, SLSESSION session, SLUINT32 fid );
功能:文件是否被取消传输
参数:
client 由SLCreateClient创建出来的被控制端环境
session 会话
fid 文件id
返回:true 传输被取消 false 其他状态
- SLRemoteSendFile 原型:SLUINT32 SLAPI SLRemoteSendFile(SLREMOTE remote, SLSESSION session, const wchar_t* filepath, bool resume )
功能:发送一个文件
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
filepath 发送文件的路径
resume 是否断点续传,否则重新发送文件
返回:文件id, 0代表失败
- SLRemoteKillFile 原型:bool SLAPI SLRemoteKillFile(SLREMOTE remote, SLSESSION session, SLUINT32 fid )
功能:取消发送文件
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:是否成功
- SLRemoteGetFileName 原型:const wchar_t* SLAPI SLRemoteGetFileName( SLREMOTE remote, SLSESSION session, SLUINT32 fid )
功能:获取文件路径名称
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:文件路径名称
- SLRemoteGetFileSize 原型:SLUINT64 SLAPI SLRemoteGetFileSize(SLREMOTE remote, SLSESSION session, SLUINT32 fid )
功能:获取传输的文件大小
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:文件大小
- SLRemoteGetFileTransfered 原型:SLUINT64 SLAPI SLRemoteGetFileTransfered(SLREMOTE remote, SLSESSION session, SLUINT32 fid )
功能:获取文件已传输的大小
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:文件已传输的大小
- SLRemoteFileIsTransfering 原型:bool SLAPI SLRemoteFileIsTransfering(SLREMOTE remote, SLSESSION session, SLUINT32 fid )
功能:文件是否正在传输中
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:true 正在传输,false 其他状态
- SLRemoteFileIsDone 原型:bool SLAPI SLRemoteFileIsDone( SLREMOTE remote, SLSESSION session, SLUINT32 fid );
功能:文件传输是否完成
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:true 传输完成 false 其他状态
- SLRemoteFileIsKilled 原型:bool SLAPI SLClientFileIsKilled( SLREMOTE remote, SLSESSION session, SLUINT32 fid );
功能:文件是否被取消传输
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
fid 文件id
返回:true 传输被取消 false 其他状态
- SLCreateClientEx 原型:bool SLAPI SLCreateClientEx( SLMODE mode );
功能:根据应用(UI,Service)场景创建向日葵客户端
参数:
mode - 应用场景
返回:返回被控制端环境值,如果创建失败则返回SLCLIENT_INVAILD
- SLOpenClientLog 原型:bool SLAPI SLOpenClientLog(SLCLIENT client, const char* path);
功能:启用被控制端的日志输出
参数:
client 由SLCreateClient创建出来的被控制端环境
path 日志的输出路径
返回:是否设置成功
- SLOpenRemoteLog 原型:bool SLAPI SLOpenRemoteLog(SLREMOTE remote, const char* path);
功能:启用主控制端的日志输出
参数:
remote由SLCreateRemote创建出来的主控制端环境
path 日志的输出路径
返回:是否设置成功
- SLSetCmdSessionPos 原型:bool SLSetCmdSessionPos(SLREMOTE remote, SLSESSION session, int x,int y,int width,int height)
功能:设置远程CMD窗口的大小
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
x x坐标
y y坐标
width宽度
height高度
返回:是否设置成功
- SLSetCameraSessionPos 原型:bool SLSetCameraSessionPos(SLREMOTE remote, SLSESSION session, int x,int y,int width,int height)
功能:设置远程摄像头窗口的大小
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
x x坐标
y y坐标
width宽度
height高度
返回:是否设置成功
- SLRemoteCameraOpen 原型:bool SLAPI SLRemoteCameraOpen(SLREMOTE remote, SLSESSION session, LONG dev_id);
功能:打开一个远程摄像头设备
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
dev_id 摄像头的唯一标识,由SLRemoteCameraGetList函数获取
返回:是否打开成功
- SLRemoteCameraClose 原型:bool SLAPI SLRemoteCameraClose(SLREMOTE remote, SLSESSION session);
功能:关闭当前正在使用的远程摄像头设备
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
返回:是否关闭成功
- SLRemoteCameraSetDefinition 原型:bool SLAPI SLRemoteCameraSetDefinition(SLREMOTE remote, SLSESSION session, ESLVideoDefinition eVD);
功能:设置当前摄像头的清晰度
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
eVD ESLVideoDefinition枚举值,主要有标清,高清,超清
返回:是否设置成功
- SLRemoteCameraGetList 原型:unsigned int SLAPI SLRemoteCameraGetList(SLREMOTE remote, SLSESSION session, CAMERA_INFO* infos = NULL, unsigned int nSize = 0);
功能:获取远程摄像头列表并返回摄像头个数,当infos为空时,此函数仅返回摄像头个数
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
infos CAMERA_INFO结构体数组,用于保存摄像头列表
nSize 结构体数组大小
返回:返回摄像头设备个数
- SLDiscoverWoiDevice 原型:bool SLAPI SLDiscoverWoiDevice(SLCLIENT client);
功能:扫描局域网内的开机棒设备,并通过SLCLIENT_WOI_CALLBACK回调返回设备的SN号
参数:
client 由SLCreateClient创建出来的被控制端环境
返回:发送扫描请求成功或失败
- SLBindWoiDevice 原型:bool SLAPI SLBindWoiDevice(SLCLIENT client, const char* pstrSN, const char* pstrMac, const char* pstrPassword);
功能:绑定局域网内的开机棒设备,并通过SLCLIENT_WOI_CALLBACK回调返回绑定结果
参数:
client 由SLCreateClient创建出来的被控制端环境
pstrSN 要绑定的开机棒的SN号
pstrMac 要绑定开机的MAC地址(AABBCCDDEEFF)
pstrPassword 远程开机密码,与MAC地址一起唤醒设备
返回:发送绑定设备请求成功或失败
- SLUnBindWoiDevice 原型:bool SLAPI SLUnBindWoiDevice(SLCLIENT client, const char* pstrSN, const char* pstrMac, const char* pstrPassword);
功能:解绑局域网内的开机棒设备,并通过SLCLIENT_WOI_CALLBACK回调返回解绑结果
参数:
client 由SLCreateClient创建出来的被控制端环境
pstrSN 要解绑的开机棒的SN号
pstrMac 要绑定开机的MAC地址(AABBCCDDEEFF)
pstrPassword 远程开机密码,与MAC地址一起解绑设备
返回:发送解绑设备请求成功或失败
- SLSetClientWOICallback 原型:bool SLAPI SLSetClientWOICallback(SLCLIENT client, SLCLIENT_WOI_CALLBACK pfnCallback, unsigned long custom);
功能:设置远程开机棒事件回调,包括发现,绑定和解绑
参数:
client 由SLCreateClient创建出来的被控制端环境
pfnCallback 回调函数,当操作开机棒发生事件时,会通过该函数回调
cusom 用户自定义参数,回调时内部程序会将此参数一并回调
返回:设置回调成功或失败
- SLSetRemoteWOIControl 原型:bool SLSetRemoteWOIControl(SLREMOTE remote, const char* pstrAddress, unsigned int nPort);
功能:设置远程开机服务器的ip和控制端口
参数:
remote 由SLCreateRemote创建出来的主控制端环境
pstrAddress 远程开机服务器的IP地址
nPort 远程开机服务器的web控制端口
返回:设置成功或失败
- SLSendWakeupCommand 原型:bool SLAPI SLSendWakeupCommand(SLREMOTE remote, const char* pstrMac, const char* pstrPassword);
功能:发送远程唤醒指令
参数:
remote 由SLCreateRemote创建出来的主控制端环境
pstrMac 待唤醒设备的Mac地址(AABBCCDDEEFF)
pstrPassword 远程开机密码,与MAC地址一起唤醒设备
返回:发送唤醒成功或失败
- SLSetRemoteWOICallback 原型:bool SLAPI SLSetRemoteWOICallback(SLREMOTE remote, SLREMOTE_WOI_CALLBACK pfnCallback, unsigned long custom);
功能:设置远程开机事件回调
参数:
remote 由SLCreateRemote创建出来的主控制端环境
pfnCallback 回调函数,当远程开机指令响应时,会通过该函数回调
cusom 用户自定义参数,回调时内部程序会将此参数一并回调
返回:设置回调成功或失败
- SLGetRemoteSysinfo 原型:unsigned int SLAPI SLGetRemoteSysinfo(SLREMOTE remote, SLSESSION session, const char* pstrQuery, const char* pstrContent);
功能:获取远程客户端的系统信息
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
pstrQuery 查询字符串<参见13>
pstrContent 查询内容<参见13>
返回:当前操作的执行的编号(自1开始递增)
- SLHideRemoteDesktopToolbarItem 原型:bool SLAPI SLHideRemoteDesktopToolbarItem(SLREMOTE remote, SLSESSION session, SLDesktopControlType eType);
功能:根据枚举值隐藏远程桌面工具栏上的对应模块
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
eType 远程桌面工具栏上各控制模块的枚举值[SLDesktopControlType]
返回:是否设置成功
- SLGetRemoteDesktopDevList 原型:unsigned int SLAPI SLGetRemoteDesktopDevList(SLREMOTE remote, SLSESSION session, SLDesktopDevType eType, SLBASE_INFO* infos = 0, unsigned int nSize = 0);
功能:获取远程桌面屏幕,会话,分辨率的信息列表并返回相应模块的个数,当infos为空时,此函数仅返回模块个数
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
eType 远程桌面中各信息模块的枚举值[SLDesktopDevType]
infos SLBASE_INFO结构体数组,用于保存基本信息列表
nSize 结构体数组大小
返回:返回模块个数
- SLSendRemoteDesktopCommand 原型:bool SLAPI SLSendRemoteDesktopCommand(SLREMOTE remote, SLSESSION session, SLDesktopCommandType eType, unsigned int nIndex = 0);
功能:发送远程桌面控制命令
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
eType 远程桌面中各命令模块的枚举值[SLDesktopCommandType]
nIndex 索引值,只针对于切换屏幕,切换会话,切换分辨率等选择性的命令有效
返回:是否执行成功
- SLGetRemoteDesktopCurState 原型:bool SLAPI SLGetRemoteDesktopCurState(SLREMOTE remote, SLSESSION session, SLDesktopStateType eType, unsigned int& nState);
功能:得到枚举的模块的当前状态值
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
eType 远程桌面中各状态模块的枚举值[SLDesktopStateType]
nState [in]状态值,保存状态模块的当前状态值或索引值
返回:是否执行成功
- SLRemoteDesktopScreenShot 原型:bool SLAPI SLRemoteDesktopScreenShot(SLREMOTE remote, SLSESSION session, const char* filepath);
功能:截取一张远程桌面图像并保存
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
filepath 截屏文件的绝对路径(包含文件名)
返回:是否截屏成功
- SLRemoteDesktopStartRecord 原型:bool SLAPI SLRemoteDesktopStartRecord( SLREMOTE remote, SLSESSION session, const char* filepath );
功能:远程桌面时,开启录像功能开始录像
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
filepath 保存的录屏文件的全路径,包含文件名(后缀一般为.ts)
返回:是否开启录像成功
- SLRemoteDesktopStopRecord 原型:void SLAPI SLRemoteDesktopStopRecord( SLREMOTE remote, SLSESSION session );
功能:远程桌面时,停止当前录像
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
返回:无
- SLSetRemoteDesktopPlatform 原型:bool SLAPI SLSetRemoteDesktopPlatform(SLREMOTE remote, SLSESSION session, SLPlatformType eType);
功能:远程桌面时手动设置被控制端的平台信息,主要用于在主控端显示不同样式的控制菜单
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 主控端桌面会话
eType被控端平台枚举值[SLPlatformType]
返回:是否设置成功
- SLClientStartChat 原型:bool SLAPI SLClientStartChat(SLCLIENT client, SLSESSION session, bool bShow = true);
功能:被控端主动发起聊天,弹出聊天窗口
参数:
client由SLCreateClient创建出来的被控制端环境
session 被控端桌面会话
bShow 是否显示窗口。如果为true,则为初始化创建窗口(仅针对Mac OSX有效)
返回:是否发起成功
- SLClientEnableControl 原型:bool SLAPI SLClientEnableControl(SLCLIENT client, SLSESSION session, bool bEnable);
功能:被控端切换控制/观看模式
参数:
client由SLCreateClient创建出来的被控制端环境
session 被控端桌面会话
bEnable是否为控制模式
返回:是否切换成功
- SLGetClientSessionConnection 原型:bool SLAPI SLGetClientSessionConnection(SLCLIENT client, SLSESSION session, bool& isp2p, bool& islocal);
功能:获取被控端当前会话的连接信息(是否是p2p连接,是否是本地局域网互联)
参数:
client由SLCreateClient创建出来的被控制端环境
session 会话
isp2p 是否是p2p连接
islocal 是否是本地局域网互联
返回:是否获取成功
- SLGetRemoteSessionConnection 原型:bool SLAPI SLGetRemoteSessionConnection(SLREMOTE remote, SLSESSION session, bool& isp2p, bool& islocal);
功能:获取主控端当前会话的连接信息(是否是p2p连接,是否是本地局域网互联)
参数:
remote由SLCreateRemote创建出来的主控制端环境
session 会话
isp2p 是否是p2p连接
islocal 是否是本地局域网互联
返回:是否获取成功
- SLSetSshSessionPos 原型:bool SLSetSshSessionPos(SLREMOTE remote, SLSESSION session, int x,int y,int width,int height)
功能:设置远程SSH窗口的大小
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
x x坐标
y y坐标
width宽度
height高度
返回:是否设置成功
- SLSetFileMgrSessionPos 原型:bool SLSetFileMgrSessionPos(SLREMOTE remote, SLSESSION session, int x,int y,int width,int height)
功能:设置远程文件管理窗口的大小
参数:
remote 由SLCreateRemote创建出来的主控制端环境
session 会话
x x坐标
y y坐标
width宽度
height高度
返回:是否设置成功 9. 会话属性
- 概述 每种类型的会话都可以设置其属性达到不同的效果,如远程桌面可以设置eSessionOpt_window来设置其远程桌面的显示窗口,同样也可以获取某个属性的属性值。
ESLSessionOpt枚举了所有可以使用的会话属性,你可以使用SLGetClientSessionOpt和SLSetRemoteSessionOpt来获取会话属性,可以使用SLSetClientSessionOpt和SLSetRemoteSessionOpt来设置会话属性。
有的属性只能用在被控制端,有的属性只能用在主控制端,有的两者都可以使用,有的属性只能设置不能获取,有的属性只能获取不能设置。以下将详细介绍各个属性的使用方式。
- eSLSessionOpt_window 适用环境:主控制端环境
适用会话:远程桌面会话,远程CMD会话,远程摄像头会话
适用方式:设置
功能:设置主控制端显示远程桌面的窗口句柄
参数:
pOptVal 窗口句柄指针,在Windows下为HWND*
nOptLen 窗口句柄字节数,在Windows下为sizeof(HWND)
- eSLSessionOpt_deviceSource 适用环境:被控制端环境
适用会话:远程声音会话
适用方式:设置/获取
功能:设置被控制端传出声音是从声卡上传出还是麦克风传出
参数:
pOptVal 是否为麦克风传出,bool类型,true为是,false为否(即声卡传出)
nOptLen bool类型长度,即1个字节
- eSLSessionOpt_connected 适用环境:被控制端环境
适用会话:所有会话
适用方式:获取
功能:获取当前会话是否已经连接还是未连接
参数:
pOptVal 是bool类型,true为已连接,false为未连接
nOptLen bool类型长度,即1个字节
- eSLSessionOpt_ipport 适用环境:主控制端环境
适用会话:所有会话
适用方式:设置
功能:设置端口转发的本地服务的ip地址和端口
参数:
pOptVal const char*类型,格式为 ip:port,具体请参考示例程序
nOptLen const char*类型长度
- eSLSessionOpt_savepath 适用环境:主控被控制端环境
适用会话:所有会话
适用方式:设置
功能:设置文件传输保存路径
参数:
pOptVal const wchar_t* 类型
nOptLen const wchar_t* 类型长度 * 2,具体请参考示例程序 10. 错误代码 代码(code) 定义 说明 0 SLERRCODE_SUCCESSED 成功 1 SLERRCODE_INNER 内部错误 2 SLERRCODE_UNINITIALIZED 未初始化 3 SLERRCODE_ARGS 参数错误 4 SLERRCODE_NOTSUPPORT 不支持 5 SLERRCODE_CONNECT_FAILED 网络连接失败 6 SLERRCODE_CONNECT_TIMEOUT 网络连接超时 7 SLERRCODE_SESSION_NOTEXIST 会话不存在 8 SLERRCODE_SESSION_OVERFLOW 会话溢出 9 SLERRCODE_SESSION_WRONGTYPE 会话类型错误 10 SLERRCODE_EXPIRED OPENID过期 11 SLERRCODE_REQUEST_FREQUENT 请求频繁 11. 被控端事件代码 代码(code) 定义 说明 0 SLCLIENT_EVENT_ONCONNECT 连接成功 1 SLCLIENT_EVENT_ONDISCONNECT 断开连接 2 SLCLIENT_EVENT_ONLOGIN 登录成功 3 SLCLIENT_EVENT_ONLOGINFAIL 登录失败 4 SLCLIENT_EVENT_ONCHANNELSFULL 连接通道已满 5 SLCLIENT_EVENT_ONCHECKCFAIL 检查通道数失败 12. 会话事件代码 代码(code) 定义 说明 1 eSLSessionEvent_OnConnected 连接成功 2 eSLSessionEvent_OnDisconnected 断开连接 3 eSLSessionEvent_OnDisplayChanged 分辨率改变 4 eSLSessionEvent_OnNewFiletrans 新文件传输 5 eSLSessionEvent_OnGetRemoteSysinfo 远程系统信息回调 13. 远程客户端系统信息 当主控端和被控端建立远程系统信息的连接后,主控端可以调用SLGetRemoteSysinfo函数来获取和修改被控端系统的一些基本信息,其中包括性能检测、事件查看、进程信息、服务、本地用户和组、共享资源和环境变量等信息。具体指令和响应数据结构如下表所示(获取信息返回xml数据结构,执行命令返回JSON数据结构):
系统信息 参数1(QueryStri
文档内容是否对您有帮助?
如果遇到产品相关问题,您可咨询 在线客服 寻求帮助。