Skip to content

Commit

Permalink
Merge pull request #151 from dotnet-campus/t/readme
Browse files Browse the repository at this point in the history
[modify] 补充readme文档;
  • Loading branch information
lindexi authored May 21, 2024
2 parents 5033842 + 0d0bb7d commit b783312
Showing 1 changed file with 113 additions and 0 deletions.
113 changes: 113 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,119 @@
- 完成 MVC 模式
- 完成接入预编译提供上层的远程调用封装

## Usage

库中提供了较为底层的通信方案,也提供了高级的封装方案(基于Json数据格式的通信方案),完整文档可参阅:

- [使用 .NET Remoting 模式的对象远程调用的 IPC 通讯方式](https://github.com/dotnet-campus/dotnetCampus.Ipc/blob/master/docs/IpcRemotingObject.md)
- [使用直接路由和 Json 通讯格式的 IPC 通讯方式](https://github.com/dotnet-campus/dotnetCampus.Ipc/blob/master/docs/JsonIpcDirectRouted.md)

### 案例:Json通信(需要2.0.0-alpha版本以上)

#### 步骤一

导入nuget包 **dotnetCampus.Ipc**(需要2.0.0-alpha版本以上),并引入所需要的命名空间;

``` C#
using dotnetCampus.Ipc.Context;
using dotnetCampus.Ipc.IpcRouteds.DirectRouteds;
using dotnetCampus.Ipc.Pipes;
```

#### 步骤二

创建实际负责IPC通信的代理对象

``` C#

/// <summary>
/// 根据<paramref name="pipeName"/>创建一个 JsonIpcDirectRoutedProvider 对象
/// </summary>
/// <param name="pipeName">不同的IPC对象所使用的管道名称,一个管道名称只能被用于一个IPC对象</param>
/// <returns></returns>
private JsonIpcDirectRoutedProvider CreateJsonIpcDirectRoutedProvider(string pipeName)
{
// 创建一个 IpcProvider,实际创建管道,进行IPC通信的底层对象
var ipcProvider = new IpcProvider(pipeName, new IpcConfiguration());

// 创建一个 JsonIpcDirectRoutedProvider,封装了通信中的Json数据解析、简化方法调用
var ipcDirectRoutedProvider = new JsonIpcDirectRoutedProvider(ipcProvider);

return ipcDirectRoutedProvider;
}

```

#### 步骤三

向IPC对象注册接受到指定消息后的处理函数(如果该IPC对象只负责发送消息,则它不需要注册消息处理回调)

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是接收消息的IPC对象");

//对无参的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler("通知消息A", () => {
Console.WriteLine("我是进程A,我收到了通知消息B,该消息无参数");
});

//对参数类型为ParamType的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler<ParamType>("通知消息B", param => {
Console.WriteLine($"我是进程A,我收到了通知消息B,该消息参数:{param.Message}");
});

//对参数类型为ParamType的请求注册回调函数并返回响应数据(可以异步处理响应、也可以无参)
ipcDirectRoutedProvider.AddRequestHandler("请求消息C", (ParamType argument) =>
{
//处理请求消息C
var response = new IpcResponse
{
Message = $"我是进程A,我收到了请求消息C,该消息参数:{argument.Message}"
};

//返回响应数据
return response;
});

```

#### 步骤四

启动服务

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是接收消息的IPC对象");

/**
一些消息注册(如果该IPC对象只负责发送消息,则它不需要注册消息处理回调;接受消息的一方需要注册接收到消息后的处理函数)
……
**/

//启动该服务
ipcDirectRoutedProvider.StartServer();

```

#### 步骤五

发送消息(如果该IPC对象只负责接收和处理消息,则它不需要发送消息)

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是发送消息的IPC对象");
//启动该服务
ipcDirectRoutedProvider.StartServer();
//根据接收方的管道名,获取需要接受到消息的IPC对象,并发送通知
var ipcReceivingObjectA = await ipcDirectRoutedProvider.GetAndConnectClientAsync("我是接收消息的IPC对象");
await ipcReceivingObjectA.NotifyAsync("通知消息A");
await ipcReceivingObjectA.NotifyAsync("通知消息B", new ParamType { Message = "我发送的通知消息是XXX" });
var response = await ipcReceivingObjectA.GetResponseAsync<IpcResponse>("请求消息C", new ParamType { Message = "我发送的请求消息XXX" });

```

*更多案例详见:* [Demo](https://github.com/dotnet-campus/dotnetCampus.Ipc/tree/master/demo)

## 感谢

- [jacqueskang/IpcServiceFramework](https://github.com/jacqueskang/IpcServiceFramework)
Expand Down

0 comments on commit b783312

Please sign in to comment.