Commit ff56a1c1 authored by 潘栩锋's avatar 潘栩锋 🚴

为 反向控制 编写 README

parent 0ca05810
...@@ -8,14 +8,18 @@ WSCF (WebSocket Communication Foundation) 就是 抄 微软的WCF, 但有 推 ...@@ -8,14 +8,18 @@ WSCF (WebSocket Communication Foundation) 就是 抄 微软的WCF, 但有 推
**WSCF.Test** 项目测试 库<br> **WSCF.Test** 项目测试 库<br>
**WSCF.Test.Client** 测试客户端<br> **WSCF.Test.Client** 测试客户端<br>
**WSCF.Test.Server** 测试服务器<br> **WSCF.Test.Server** 测试服务器<br>
<br> <br>
**WSCF.RevCtrl.Test** 反向控制项目测试<br>
**WSCF.RevCtrl.Test.Client** 反向控制项目.测试客户端<br>
**WSCF.RevCtrl.Test.Server** 反向控制项目.测试服务器<br>
<br> <br>
<br> <br>
<br> <br>
# 正向控制
正向控制: 客户端连接服务器,远程调用在服务器中的服务接口
# 2. 使用方法 ## 1. 使用方法
1. 定义服务接口 IXXXService 1. 定义服务接口 IXXXService
//WSCF.Test/IService/IFooService.cs //WSCF.Test/IService/IFooService.cs
...@@ -60,7 +64,7 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo"); ...@@ -60,7 +64,7 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo");
<br> <br>
# 3. 描述 ## 2. 描述
服务代理 它还另一个版本 在项目 FObjBase.Reflect 服务代理 它还另一个版本 在项目 FObjBase.Reflect
...@@ -83,3 +87,84 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo"); ...@@ -83,3 +87,84 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo");
[Push(typeof(BulkDBTempFrameChangedEventArgs))] [Push(typeof(BulkDBTempFrameChangedEventArgs))]
public event EventHandler TempFrameChanged; public event EventHandler TempFrameChanged;
``` ```
<br><br><br><br><br><br><br><br><br>
# 反向控制
反向控制: 服务器 通过 客户端 connect 过来的通道 连接 在客户端服务代理。<br>
使用场景:<br>
服务器 需要独立控制某个客户端
## 1. 使用方法
### 1.1 在服务器程序需要用到的
<br>
1. 在服务器中创建服务代理时,<br>
```csharp
wssv.AddWebSocketService<Reflect_Proxy>()
```
改为
```csharp
wssv.AddWebSocketService<RevCtrl_Proxy>()
```
服务对象 必须继承 WSCF.RevCtrl.IRevCtrlAdmin<br>
//RevCtrl.Test/WSCF.RevCtrl.Test.Server/Server/WsProxy.cs
2. 在服务对象实现时,<br>
在有回复的函数中:
```csharp
public void SendMsgToPrivateChat(string targetGuid, string msg, AsyncCBHandler asyncDelegate, object asyncContext)
{
var cc = asyncContext as WSCF.CC;
var customerContext = customerContexts.Find(c => c.revCtrl_Proxy == cc.proxy);//cc.proxy 就是 RevCtrl_Proxy
```
有了 RevCtrl_Proxy, 就能通过 AddClient 添加 **服务的ServiceClient**
```csharp
RevCtrl_Proxy.AddClient("服务名称", 服务的ServiceClient);
```
除了在 有回复的函数 获取RevCtrl_Proxy, 还能通过 **WSCF.RevCtrl.IRevCtrlAdmin** 获取 **RevCtrl_Proxy**
```csharp
public interface IRevCtrlAdmin
{
void OnOpen(RevCtrl_Proxy proxy);//连接建立
void OnClose(RevCtrl_Proxy proxy);//连接关闭
void OnDispose(RevCtrl_Proxy proxy);//连接释放
}
```
//RevCtrl.Test/WSCF.RevCtrl.Test.Server/Server/Chat.cs
3. 在已有的连接中,在添加的 **服务的ServiceClient** , 不再继承 ~~Feflect_ServiceClient~~ ,需要 继承 **WsServiceClient**
//RevCtrl.Test/WSCF.RevCtrl.Test.Server/ServiceClient/CustomerServiceClient.cs
### 1.2 在客户端程序需要用到的
<br>
1. 能支持反向控制的 **服务的ServiceClient** 必须继承 **RevCtrl_ServiceClient**
//RevCtrl.Test/WSCF.RevCtrl.Test.Client/ServiceClient/ChatServiceClient.cs
2. 把在客户端中的 服务代理 挂在到 **RevCtrl_ServiceClient**
```csharp
//创建本地 顾客
customer = new Customer();
//创建并且连接到 服务器的 Chat 服务
chatService = new ChatServiceClient("Chat", true, connName);
//创建 顾客功能 服务代理, 给服务器反向控制 顾客
var wsServiceProxy = new WsServiceProxy();
wsServiceProxy.Init(typeof(ICustomerService), customer);
chatService.AddProxy("Customer", wsServiceProxy); //挂载服务
```
...@@ -79,7 +79,7 @@ namespace WSCF.RevCtrl.Test.Client ...@@ -79,7 +79,7 @@ namespace WSCF.RevCtrl.Test.Client
//创建 顾客功能 服务代理, 给服务器反向控制 顾客 //创建 顾客功能 服务代理, 给服务器反向控制 顾客
var wsServiceProxy = new WsServiceProxy(); var wsServiceProxy = new WsServiceProxy();
wsServiceProxy.Init(typeof(ICustomerService), customer); wsServiceProxy.Init(typeof(ICustomerService), customer);
chatService.AddProxy("Customer", wsServiceProxy); chatService.AddProxy("Customer", wsServiceProxy);//挂载服务
AllCustomers.Add(new CustomerInfo() { Name = $"群聊[{chatService.CustomerCount}]" }); AllCustomers.Add(new CustomerInfo() { Name = $"群聊[{chatService.CustomerCount}]" });
......
...@@ -11,10 +11,22 @@ namespace WSCF.RevCtrl ...@@ -11,10 +11,22 @@ namespace WSCF.RevCtrl
/// </summary> /// </summary>
public interface IRevCtrlAdmin public interface IRevCtrlAdmin
{ {
/// <summary>
/// 连接建立
/// </summary>
/// <param name="proxy"></param>
void OnOpen(RevCtrl_Proxy proxy); void OnOpen(RevCtrl_Proxy proxy);
/// <summary>
/// 连接关闭
/// </summary>
/// <param name="proxy"></param>
void OnClose(RevCtrl_Proxy proxy); void OnClose(RevCtrl_Proxy proxy);
/// <summary>
/// 连接释放
/// </summary>
/// <param name="proxy"></param>
void OnDispose(RevCtrl_Proxy proxy); void OnDispose(RevCtrl_Proxy proxy);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment