# web.socket.jsonServer 库模块帮助文档

## web.socket 成员列表 <a id="web.socket" href="#web.socket">&#x23;</a>

### web.socket.jsonServer <a id="web.socket.jsonServer" href="#web.socket.jsonServer">&#x23;</a>
创建WebSocket/JSON-RPC 2.0服务端

### web.socket.jsonServer() <a id="web.socket.jsonServer" href="#web.socket.jsonServer">&#x23;</a>
[返回对象:websocketjsonserverObject](#websocketjsonserverObject)

### web.socket.jsonServer(wsServer,external) <a id="web.socket.jsonServer" href="#web.socket.jsonServer">&#x23;</a>
创建WebSocket/JSON-RPC 2.0服务端  
参数@1应当是一个 web.socket.server对象  
参数@2指定客户端可以调用的表对象  
external也可以在创建对象以后,使用对象的external属性指定

## websocketjsonserverObject 成员列表 <a id="websocketjsonserverObject" href="#websocketjsonserverObject">&#x23;</a>

### websocketjsonserverObject.aasdl <a id="websocketjsonserverObject.aasdl" href="#websocketjsonserverObject.aasdl">&#x23;</a>
指定自定义的aasdl  
如果客户端请求的方法名为"?"时,返回此属性,  
[关于aasdl](https://github.com/aardio/aardio-js/blob/master/AASDL.md)

### websocketjsonserverObject.afterJsonStringify <a id="websocketjsonserverObject.afterJsonStringify" href="#websocketjsonserverObject.afterJsonStringify">&#x23;</a>

```aardio
websocketjsonserverObject.afterJsonStringify = function(jsonData){
    /*可以在这里加密服务端数据,返回null中止本次调用*/
	return jsonData;
}
```

### websocketjsonserverObject.beforeJsonParse <a id="websocketjsonserverObject.beforeJsonParse" href="#websocketjsonserverObject.beforeJsonParse">&#x23;</a>

```aardio
websocketjsonserverObject.beforeJsonParse = function(hSocket,jsonData){
    /*可以在这里解密客户端数据,返回null中止本次调用*/
	return jsonData;
}
```

### websocketjsonserverObject.external <a id="websocketjsonserverObject.external" href="#websocketjsonserverObject.external">&#x23;</a>
指定包含客户端可以调用的远程函数的表对象,可嵌套子表  

如果远程函数名第一个字符是$,则第一个回调参数为hSocket,用于表示当前发送请求的客户端套接字,  

如果客户端请求方法名为"?"时，并且服务端没有指定aasdl属性  
服务端会根据aasdl协议将对象序列化为json并返回客户端，   
[关于aasdl](https://github.com/aardio/aardio-js/blob/master/AASDL.md)

### websocketjsonserverObject.hActiveSocket <a id="websocketjsonserverObject.hActiveSocket" href="#websocketjsonserverObject.hActiveSocket">&#x23;</a>
获取当前活动的客户端套接字句柄,  
应当在RPC回调的第一句代码中获取此句柄,  
因为执行其他代码都有可能导致其他客户端变为活动客户端

### websocketjsonserverObject.isClosed(hSocket) <a id="websocketjsonserverObject.isClosed" href="#websocketjsonserverObject.isClosed">&#x23;</a>
连接是否已关闭

### websocketjsonserverObject.isConnected(hSocket) <a id="websocketjsonserverObject.isConnected" href="#websocketjsonserverObject.isConnected">&#x23;</a>
是否已连接并准备就绪可以发送数据

### websocketjsonserverObject.notify(hSocket,method,...) <a id="websocketjsonserverObject.notify" href="#websocketjsonserverObject.notify">&#x23;</a>
主动向客户端发送通知  
参数hSocket指定客户端套接字句柄,  
method指定客户端方法名,  
可添加任意个调用参数

### websocketjsonserverObject.publish(method,...) <a id="websocketjsonserverObject.publish" href="#websocketjsonserverObject.publish">&#x23;</a>
主动向所有客户端发送通知  
method指定客户端方法名,  
可添加任意个调用参数

### websocketjsonserverObject.send(hSocket,rep) <a id="websocketjsonserverObject.send" href="#websocketjsonserverObject.send">&#x23;</a>
对指定的套接字发送数据,  
参数hSocket指定客户端套接字句柄,  
rep应当是符合JSON-RPC 2.0编码协议的响应对象  
不建议直接调用此函数发送消息

### websocketjsonserverObject.start(hSocket) <a id="websocketjsonserverObject.start" href="#websocketjsonserverObject.start">&#x23;</a>
对指定的套接字启动JSON-RPC服务  
参数hSocket指定客户端套接字句柄,  
hSocket参数必须在web.socket.server服务端对象  
的onUpgradeToWebsocket事件中获取

### websocketjsonserverObject.survey(method,...) <a id="websocketjsonserverObject.survey" href="#websocketjsonserverObject.survey">&#x23;</a>
发起调查任务,  
调用所有客户端的同名函数,  
method指定客户端方法名,  
可添加任意个调用参数  

客户端会触发xcallback的成员函数，  
请参考xcallback的说明

### websocketjsonserverObject.version <a id="websocketjsonserverObject.version" href="#websocketjsonserverObject.version">&#x23;</a>
JSON-RPC版本号，不应改动

### websocketjsonserverObject.wsServer <a id="websocketjsonserverObject.wsServer" href="#websocketjsonserverObject.wsServer">&#x23;</a>
web.socket.server服务端对象

### websocketjsonserverObject.xcall(hSocket,method,...) <a id="websocketjsonserverObject.xcall" href="#websocketjsonserverObject.xcall">&#x23;</a>
主动调用客户端函数  
参数hSocket指定客户端套接字句柄,  
method指定客户端方法名,  
可添加任意个调用参数  

客户端会触发xcallback的成员函数，  
请参考xcallback的说明

## websocketjsonserverObject.web.socket 成员列表 <a id="websocketjsonserverObject.web.socket" href="#websocketjsonserverObject.web.socket">&#x23;</a>

### websocketjsonserverObject.web.socket.jsonServer <a id="websocketjsonserverObject.web.socket.jsonServer" href="#websocketjsonserverObject.web.socket.jsonServer">&#x23;</a>
创建WebSocket/JSON-RPC 2.0服务端

## websocketjsonserverObject.xcallback 成员列表 <a id="websocketjsonserverObject.xcallback" href="#websocketjsonserverObject.xcallback">&#x23;</a>

服务端通过xcall函数调用客户端函数时  
客户端如果返回应答会自动回调xcallback的成员函数

### websocketjsonserverObject.xcallback.* <a id="websocketjsonserverObject.xcallback.any" href="#websocketjsonserverObject.xcallback.any">&#x23;</a>

```aardio
websocketjsonserverObject.xcallback./*出错时err为错误对象,  
否则result为客户端返回的值  
hSocket为客户端套接字*/ = function(hSocket,result,err){

}
```

