Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
W
WSCF
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
潘栩锋
WSCF
Commits
ff56a1c1
Commit
ff56a1c1
authored
Nov 11, 2021
by
潘栩锋
🚴
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
为 反向控制 编写 README
parent
0ca05810
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
101 additions
and
4 deletions
+101
-4
README.md
README.md
+88
-3
MainWindow.xaml.cs
RevCtrl.Test/WSCF.RevCtrl.Test.Client/MainWindow.xaml.cs
+1
-1
IRevCtrlAdmin.cs
WSCF/RevCtrl/IRevCtrlAdmin.cs
+12
-0
No files found.
README.md
View file @
ff56a1c1
...
...
@@ -8,14 +8,18 @@ WSCF (WebSocket Communication Foundation) 就是 抄 微软的WCF, 但有 推
**WSCF.Test**
项目测试 库
<br>
**WSCF.Test.Client**
测试客户端
<br>
**WSCF.Test.Server**
测试服务器
<br>
<br>
**WSCF.RevCtrl.Test**
反向控制项目测试
<br>
**WSCF.RevCtrl.Test.Client**
反向控制项目.测试客户端
<br>
**WSCF.RevCtrl.Test.Server**
反向控制项目.测试服务器
<br>
<br>
<br>
<br>
# 正向控制
正向控制: 客户端连接服务器,远程调用在服务器中的服务接口
#
2
. 使用方法
#
# 1
. 使用方法
1.
定义服务接口 IXXXService
//WSCF.Test/IService/IFooService.cs
...
...
@@ -60,7 +64,7 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo");
<br>
#
3
. 描述
#
# 2
. 描述
服务代理 它还另一个版本 在项目 FObjBase.Reflect
...
...
@@ -83,3 +87,84 @@ Foo = new WSCF.Test.ServiceClient.FooServiceClient("Foo", true, "foo");
[
Push
(
typeof
(
BulkDBTempFrameChangedEventArgs
))]
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
);
//挂载服务
```
RevCtrl.Test/WSCF.RevCtrl.Test.Client/MainWindow.xaml.cs
View file @
ff56a1c1
...
...
@@ -79,7 +79,7 @@ namespace WSCF.RevCtrl.Test.Client
//创建 顾客功能 服务代理, 给服务器反向控制 顾客
var
wsServiceProxy
=
new
WsServiceProxy
();
wsServiceProxy
.
Init
(
typeof
(
ICustomerService
),
customer
);
chatService
.
AddProxy
(
"Customer"
,
wsServiceProxy
);
chatService
.
AddProxy
(
"Customer"
,
wsServiceProxy
);
//挂载服务
AllCustomers
.
Add
(
new
CustomerInfo
()
{
Name
=
$"群聊[
{
chatService
.
CustomerCount
}
]"
});
...
...
WSCF/RevCtrl/IRevCtrlAdmin.cs
View file @
ff56a1c1
...
...
@@ -11,10 +11,22 @@ namespace WSCF.RevCtrl
/// </summary>
public
interface
IRevCtrlAdmin
{
/// <summary>
/// 连接建立
/// </summary>
/// <param name="proxy"></param>
void
OnOpen
(
RevCtrl_Proxy
proxy
);
/// <summary>
/// 连接关闭
/// </summary>
/// <param name="proxy"></param>
void
OnClose
(
RevCtrl_Proxy
proxy
);
/// <summary>
/// 连接释放
/// </summary>
/// <param name="proxy"></param>
void
OnDispose
(
RevCtrl_Proxy
proxy
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment