# web.SocketSharp 库模块帮助文档

<details>  <summary>参考文档</summary>  <p>

websocket-sharp.dll 源码
https://github.com/aardio/websocket-sharp

注意：
使用 console.open 打开控制台可以查看 web.SocketSharp 输出的错误信息。
</p></details>

## web.SocketSharp 成员列表 <a id="web.SocketSharp" href="#web.SocketSharp">&#x23;</a>

支持 ws,wss 的 WebSocket 组件，这是一个 .NET 组件。  
仅适用于界面线程。

### web.SocketSharp.Net <a id="web.SocketSharp.Net" href="#web.SocketSharp.Net">&#x23;</a>
.NET 命名空间 WebSocketSharp.Net 的别名

### web.SocketSharp.WebSocket() <a id="web.SocketSharp.WebSocket" href="#web.SocketSharp.WebSocket">&#x23;</a>
调用 WebSocketSharp 创建 WebSocket 客户端对象。  
参数 @1 可指定端口号，也可指定 ws 或 wss 协议服务器地址。  
返回 .NET 对象，用法请参考 dotNet 库以及范例

[返回对象:wssNetClientObject](#wssNetClientObject)

## web.SocketSharp.Server 成员列表 <a id="web.SocketSharp.Server" href="#web.SocketSharp.Server">&#x23;</a>

### web.SocketSharp.Server.HttpServer() <a id="web.SocketSharp.Server.HttpServer" href="#web.SocketSharp.Server.HttpServer">&#x23;</a>
调用 WebSocketSharp 创建 WebSocket + HTTP 服务端对象。  
参数 @1 可指定 https 或 https 协议服务器地址。  
返回 .NET 对象，用法请参考 dotNet 库以及范例。  

注意用 console.open 打开控制台可查看 WebSocketSharp 输出的错误信息

[返回对象:wssNetHttpServerObject](#wssNetHttpServerObject)

### web.SocketSharp.Server.WebSocketServer() <a id="web.SocketSharp.Server.WebSocketServer" href="#web.SocketSharp.Server.WebSocketServer">&#x23;</a>
调用 WebSocketSharp 创建 WebSocket 服务端对象。  
参数 @1 可指定 ws 或 wss 协议服务器地址。  
返回 .NET 对象，用法请参考 dotNet 库以及范例。  

注意用 console.open 打开控制台可查看 WebSocketSharp 输出的错误信息

[返回对象:wssNetServerObject](#wssNetServerObject)

## web.SocketSharp.WebSocketState 成员列表 <a id="web.SocketSharp.WebSocketState" href="#web.SocketSharp.WebSocketState">&#x23;</a>

### web.SocketSharp.WebSocketState.Closed <a id="web.SocketSharp.WebSocketState.Closed" href="#web.SocketSharp.WebSocketState.Closed">&#x23;</a>
已关闭

### web.SocketSharp.WebSocketState.Closing <a id="web.SocketSharp.WebSocketState.Closing" href="#web.SocketSharp.WebSocketState.Closing">&#x23;</a>
正在关闭

### web.SocketSharp.WebSocketState.Connecting <a id="web.SocketSharp.WebSocketState.Connecting" href="#web.SocketSharp.WebSocketState.Connecting">&#x23;</a>
正在连接

### web.SocketSharp.WebSocketState.Open <a id="web.SocketSharp.WebSocketState.Open" href="#web.SocketSharp.WebSocketState.Open">&#x23;</a>
已连接

## wssNetClientObject 成员列表 <a id="wssNetClientObject" href="#wssNetClientObject">&#x23;</a>

### wssNetClientObject.Close() <a id="wssNetClientObject.Close" href="#wssNetClientObject.Close">&#x23;</a>
关闭连接。  
参数 @1 可选用数值指定关闭代码，参数 @2 可选用字符串指定关闭理由

### wssNetClientObject.CloseAsync() <a id="wssNetClientObject.CloseAsync" href="#wssNetClientObject.CloseAsync">&#x23;</a>
关闭连接，异步非阻塞执行。  
参数 @1 可选用数值指定关闭代码，参数 @2 可选用字符串指定关闭理由

### wssNetClientObject.Connect() <a id="wssNetClientObject.Connect" href="#wssNetClientObject.Connect">&#x23;</a>
连接 WebSocket 服务器

### wssNetClientObject.ConnectAsync() <a id="wssNetClientObject.ConnectAsync" href="#wssNetClientObject.ConnectAsync">&#x23;</a>
连接 WebSocket 服务器，异步非阻塞执行

### wssNetClientObject.EmitOnPing <a id="wssNetClientObject.EmitOnPing" href="#wssNetClientObject.EmitOnPing">&#x23;</a>
Ping 消息是否触发 OnMessage

OnMessage 是否处理 Ping 消息。  
回调参数 e 的 e.IsPing 属性可以判断是否 Ping 消息

### wssNetClientObject.EnableRedirection <a id="wssNetClientObject.EnableRedirection" href="#wssNetClientObject.EnableRedirection">&#x23;</a>
是否允许重定向

### wssNetClientObject.Extensions <a id="wssNetClientObject.Extensions" href="#wssNetClientObject.Extensions">&#x23;</a>
扩展，字符串

### wssNetClientObject.Headers <a id="wssNetClientObject.Headers" href="#wssNetClientObject.Headers">&#x23;</a>

```aardio
wssNetClientObject.Headers["/*指定自定义 HTTP 请求头名字，不包含冒号。  
值必须是字符串 或 null。  
值为 null 时可清除之前设置的自定义请求头*/"] = ""
```

### wssNetClientObject.IsAlive <a id="wssNetClientObject.IsAlive" href="#wssNetClientObject.IsAlive">&#x23;</a>
是否连接状态

### wssNetClientObject.IsSecure <a id="wssNetClientObject.IsSecure" href="#wssNetClientObject.IsSecure">&#x23;</a>
是否安全连接

### wssNetClientObject.OnClose <a id="wssNetClientObject.OnClose" href="#wssNetClientObject.OnClose">&#x23;</a>

```aardio
wssNetClientObject.OnClose = function(sender, e){
	/*接口已关闭。  
e.Code 为错误码数值，e.Reason 为表示错误原因的字符串*/
}
```

### wssNetClientObject.OnError <a id="wssNetClientObject.OnError" href="#wssNetClientObject.OnError">&#x23;</a>

```aardio
wssNetClientObject.OnError = function(sender, e){
	/*"出错了, e.Message 为错误消息，字符串值。  
如果错误为异常，则 e.Exception 为 System.Exception 对象*/

}
```

### wssNetClientObject.OnMessage <a id="wssNetClientObject.OnMessage" href="#wssNetClientObject.OnMessage">&#x23;</a>

```aardio
wssNetClientObject.OnMessage = function(sender, e){
	/*收到消息", e.Data 为收到的字符串*/
}
```

### wssNetClientObject.OnOpen <a id="wssNetClientObject.OnOpen" href="#wssNetClientObject.OnOpen">&#x23;</a>

```aardio
wssNetClientObject.OnOpen = function(sender, e){
	/*连接已打开*/
}
```

### wssNetClientObject.Origin <a id="wssNetClientObject.Origin" href="#wssNetClientObject.Origin">&#x23;</a>
Origin 请求头

### wssNetClientObject.Protocol <a id="wssNetClientObject.Protocol" href="#wssNetClientObject.Protocol">&#x23;</a>
协议

### wssNetClientObject.ReadyState <a id="wssNetClientObject.ReadyState" href="#wssNetClientObject.ReadyState">&#x23;</a>
连接状态 web.SocketSharp.WebSocketState 枚举

### wssNetClientObject.Send() <a id="wssNetClientObject.Send" href="#wssNetClientObject.Send">&#x23;</a>
发送字符串或 buffer 对象

### wssNetClientObject.SendAsync(data,callback) <a id="wssNetClientObject.SendAsync" href="#wssNetClientObject.SendAsync">&#x23;</a>

```aardio
wssNetClientObject.SendAsync(/*指定要异步发送的字符串或 buffer，  
发送完成回调参数 @2 指定的函数*/,function(completed){  

})
```

### wssNetClientObject.SetCookie(cookie) <a id="wssNetClientObject.SetCookie" href="#wssNetClientObject.SetCookie">&#x23;</a>
设置 Cookie 参数为 web.SocketSharp.Net.Cookie 对象

### wssNetClientObject.SetCredentials <a id="wssNetClientObject.SetCredentials" href="#wssNetClientObject.SetCredentials">&#x23;</a>
设置身份验证信息。

### wssNetClientObject.SetCredentials(username,password,preAuth) <a id="wssNetClientObject.SetCredentials" href="#wssNetClientObject.SetCredentials">&#x23;</a>
设置身份验证信息。\ @nusername 指定用户名， @password 指定密码。  
如果 @preAuth 为 true 则第一次请求就发送验证信息。  
否则在请求失败后再发送

### wssNetClientObject.SetProxy <a id="wssNetClientObject.SetProxy" href="#wssNetClientObject.SetProxy">&#x23;</a>
设置代理服务器

### wssNetClientObject.SetProxy(url,username,password) <a id="wssNetClientObject.SetProxy" href="#wssNetClientObject.SetProxy">&#x23;</a>
设置代理服务器，代理地址必须以 "HTTP://" 开始，例如 "HTTP://127.0.0.1:1082"。  
参数 @2 指定用户名，参数 @3 指定密码，不需要登录也要指定空字符串

### wssNetClientObject.Url <a id="wssNetClientObject.Url" href="#wssNetClientObject.Url">&#x23;</a>
连接 URL，System.Uri 对象

### wssNetClientObject.WaitTime <a id="wssNetClientObject.WaitTime" href="#wssNetClientObject.WaitTime">&#x23;</a>
等待时间 System.TimeSpan 对象

### wssNetClientObject.setAuthToken(token,tokenType) <a id="wssNetClientObject.setAuthToken" href="#wssNetClientObject.setAuthToken">&#x23;</a>
设置认证令牌（token）。  
@token 可指定令牌，也可以指定返回令牌的网址。  
@tokenType 为可选参数，默认为"Bearer"。  
如果指定了令牌，则会添加请求头 "Authorization:Bearer 令牌"。  
@tokenType 也可以指定为空字符串。

## wssNetClientObject.SslConfiguration 成员列表 <a id="wssNetClientObject.SslConfiguration" href="#wssNetClientObject.SslConfiguration">&#x23;</a>

### wssNetClientObject.SslConfiguration.EnabledSslProtocols <a id="wssNetClientObject.SslConfiguration.EnabledSslProtocols" href="#wssNetClientObject.SslConfiguration.EnabledSslProtocols">&#x23;</a>
设置 SSL 协议版本，默认为 12288/*tls13*/ | 3072/*Tls12*/| 768/*Tls11*/ | 192/*Tls*/

## wssNetHttpServerObject 成员列表 <a id="wssNetHttpServerObject" href="#wssNetHttpServerObject">&#x23;</a>

### wssNetHttpServerObject.AddWebSocketService <a id="wssNetHttpServerObject.AddWebSocketService" href="#wssNetHttpServerObject.AddWebSocketService">&#x23;</a>

```aardio
wssNetHttpServerObject.AddWebSocketService("/echo",class {  

	onMessage = function(e){  
		/*  
		this.socket 会自动绑定为 WebSocketSharp.Server.WebSocketBehavior 实例。  
		用法请参考 WebSocketSharp 文档。  

		上面的参数 @1 指定了服务目录为 "/echo"。   
		参数 @2 则需要指定一个 WebSocket 会话类。  
		每次创建新的 WebSocket 连接时会调用类创建 WebSocket 会话实例。   

		必须定义 this.onMessage 事件用于接收消息。  
		可选定义 this.onOpen, this.onClose, this.onError 事件。  
		这几个事件与 WebSocketSharp.Server.WebSocketBehavio 的同名事件用法相同。  
		唯一不同的是首字母小写。  

		发送消息函数：  
		this.send() 等价于调用 this.socket.Send() 同步发送消息。  
		this.sendAsync() 等价于调用 this.socket.SendAsync() 异步发送消息。  
		唯一区别是首字母小写。  
		*/   

		/* 同步发送消息，e.data 就是客户端发过来的消息  */   
			this.send(e.data)  

			/* 异步发送消息，成功回调参数 @2 */   
			this.sendAsync(e.data,function(completed){  

			} )  

	}    
});
```

### wssNetHttpServerObject.AuthenticationSchemes <a id="wssNetHttpServerObject.AuthenticationSchemes" href="#wssNetHttpServerObject.AuthenticationSchemes">&#x23;</a>
身份验证方法，  
Digest 验证设为 1，Basic 验证设为 8

### wssNetHttpServerObject.DocumentRootPath <a id="wssNetHttpServerObject.DocumentRootPath" href="#wssNetHttpServerObject.DocumentRootPath">&#x23;</a>
网站根目录，需要用 io.fullpath 转换为绝对路径

### wssNetHttpServerObject.Start() <a id="wssNetHttpServerObject.Start" href="#wssNetHttpServerObject.Start">&#x23;</a>
启动服务器

### wssNetHttpServerObject.Stop() <a id="wssNetHttpServerObject.Stop" href="#wssNetHttpServerObject.Stop">&#x23;</a>
停止服务器

## wssNetHttpServerObject.SslConfiguration 成员列表 <a id="wssNetHttpServerObject.SslConfiguration" href="#wssNetHttpServerObject.SslConfiguration">&#x23;</a>

SSL 证书配置。\bwss 服务端必须指定证书，网上找个在线工具生成测试证书也行

SSL 证书配置。\bwss 服务端必须指定证书，网上找个在线工具生成测试证书也行

### wssNetHttpServerObject.SslConfiguration.ServerCertificate <a id="wssNetHttpServerObject.SslConfiguration.ServerCertificate" href="#wssNetHttpServerObject.SslConfiguration.ServerCertificate">&#x23;</a>

```aardio
wssNetHttpServerObject.SslConfiguration.ServerCertificate = System.Security.Cryptography.X509Certificates.X509Certificate2(  
	io.fullpath("\/*指定证书路径*/.pfx"), "密码"  
);
```

```aardio
wssNetHttpServerObject.SslConfiguration.ServerCertificate = System.Security.Cryptography.X509Certificates.X509Certificate2(  
	io.fullpath("\/*指定证书路径*/.pfx"), "密码"  
);
```

## wssNetServerObject 成员列表 <a id="wssNetServerObject" href="#wssNetServerObject">&#x23;</a>

### wssNetServerObject.AddWebSocketService <a id="wssNetServerObject.AddWebSocketService" href="#wssNetServerObject.AddWebSocketService">&#x23;</a>

```aardio
wssNetServerObject.AddWebSocketService("/echo",class {  

	onMessage = function(e){  
		/*  
		this.socket 会自动绑定为 WebSocketSharp.Server.WebSocketBehavior 实例。  
		用法请参考 WebSocketSharp 文档。  

		上面的参数 @1 指定了服务目录为 "/echo"。   
		参数 @2 则需要指定一个 WebSocket 会话类。  
		每次创建新的 WebSocket 连接时会调用类创建 WebSocket 会话实例。   

		必须定义 this.onMessage 事件用于接收消息。  
		可选定义 this.onOpen, this.onClose, this.onError 事件。  
		这几个事件与 WebSocketSharp.Server.WebSocketBehavio 的同名事件用法相同。  
		唯一不同的是首字母小写。  

		发送消息函数：  
		this.send() 等价于调用 this.socket.Send() 同步发送消息。  
		this.sendAsync() 等价于调用 this.socket.SendAsync() 异步发送消息。  
		唯一区别是首字母小写。  
		*/   

		/* 同步发送消息，e.data 就是客户端发过来的消息  */   
			this.send(e.data)  

			/* 异步发送消息，成功回调参数 @2 */   
			this.sendAsync(e.data,function(completed){  

			} )  

	}    
});
```

### wssNetServerObject.Start() <a id="wssNetServerObject.Start" href="#wssNetServerObject.Start">&#x23;</a>
启动服务器

### wssNetServerObject.Stop() <a id="wssNetServerObject.Stop" href="#wssNetServerObject.Stop">&#x23;</a>
停止服务器。  
建议在窗体 onDestroy 事件中调用此函数。  
不然下次启动，短时间内端口会是占用状态

## wssNetServerObject.SslConfiguration 成员列表 <a id="wssNetServerObject.SslConfiguration" href="#wssNetServerObject.SslConfiguration">&#x23;</a>

SSL 证书配置。\bwss 服务端必须指定证书，网上找个在线工具生成测试证书也行

### wssNetServerObject.SslConfiguration.EnabledSslProtocols <a id="wssNetServerObject.SslConfiguration.EnabledSslProtocols" href="#wssNetServerObject.SslConfiguration.EnabledSslProtocols">&#x23;</a>
设置 SSL 协议版本，默认为 12288/*tls13*/ | 3072/*Tls12*/| 768/*Tls11*/ | 192/*Tls*/

### wssNetServerObject.SslConfiguration.ServerCertificate <a id="wssNetServerObject.SslConfiguration.ServerCertificate" href="#wssNetServerObject.SslConfiguration.ServerCertificate">&#x23;</a>

```aardio
wssNetServerObject.SslConfiguration.ServerCertificate = System.Security.Cryptography.X509Certificates.X509Certificate2(  
	io.fullpath("\/*指定证书路径*/.pfx"), "密码"  
);
```

