前言

作为一名开发者,想必您有最基本的思考、解决问题的能力,所以本开发文档会较为精简
* 本文档仅有库使用教程和示例代码

简介

  • PMCSsE_Communicator是为了对前后端的通信进行简化和保护

功能介绍和特点


  • 极大地简化了通信流程,仅需简单的调用即可完成复杂的握手、通信加密和解密
  • 前后端仅需关注如何处理收到的各种信息和请求,无需关注具体实现
  • 使用了多线程,无需担忧网络io阻塞UI线程
  • 使用事件驱动
  • 内含各种模板类,使用json序列化/反序列化类,无需自行编写

基本流程(前3步不会的请自行搜索教程)

  1. 搭建开发环境
  2. 下载对应平台所需的库文件(.dll/.so等)
  3. 添加库引用
  4. 查看使用示例并开始编写代码

开发答疑

加入八宝粥的项目交流群
老八坤术交流群


公共成员的基本介绍

  • 考虑到后端仅有八宝粥一人负责,所有暂时只有NativeClient的教程

NativeClient

  • 中文意思:原生客户端

Q:为什么是这个名字?
A:为了区别于网页端,同时表达其底层性质

作用:与NativeServer握手并建立加密连接、传输数据

公共方法

构造函数

NativeClient nativeClient = new(string ip, int port);
其中ipport要求用户手动输入即可
(可以同时要求用户提前输入访问密钥,无需连接时再输入,增加用户操作的流畅感)

Connect

nativeClient.Connent();

  • 启动客户端线程并开始连接到后端

TypePassword

nativeClient.TypePassword(string password);

  • 将访问密钥输入到NativeClient的内部字段

SendRequestToBackend

nativeClient.SendRequestToBackend(SendRequestEnum sendRequestEnum, object? content = null);

  • 向后端发送请求
  • “SendRequestEnum”为库中的枚举类型,content为任意对象(可选的参数)

SendRequestEnum.GetMCServerManagersList

  • 与NativeClient.SendRequestToBackend方法搭配使用
  • 发送获取所有服务端管理器请求,content为null即可
  • 若后端成功接收并处理,则会返回服务端管理器列表
  • 此时如果订阅了NativeClient.CommunicatorDataReceived就会收到完整的服务端管理器列表

SendRequestEnum.AddNewMCServerManager

  • 与NativeClient.SendRequestToBackend方法搭配使用
  • 发送添加新的服务端管理器请求,content为null即可
  • 若后端成功接收并处理,则会返回“已添加”并广播服务端管理器列表
  • 此时如果订阅了NativeClient.CommunicatorDataReceived就会收到完整的服务端管理器列表

Disconnect

nativeClient.Disconnent();

  • 取消所有IO操作并停止客户端线程

Dispose

nativeClient.Dispose();

  • 释放NativeClient所使用的所有资源
  • 注意:释放后需重新创建新实例才能再次使用

公共事件

ReportLog

订阅(Lambda表达式):

void ListenEvent()
{
    nativeClient.ReportLog+=(log)=>
    {
        HandleLog(log);
        //注:log为string
    };
}

解除订阅(Lambda表达式):无法解除

订阅(事件处理方法):

void ListenEvent()
{
    nativeClient.ReportLog+=HandleReportLogEvent;
}
void HandleReportLogEvent(string log)
{
    Console.WriteLine(log);
}

解除订阅(事件处理方法):

void ListenEvent()
{
    nativeClient.ReportLog-=HandleReportLogEvent;
}
void HandleReportLogEvent(string log)
{
    Console.WriteLine(log);
}

Connected

订阅(Lambda表达式):

void ListenEvent()
{
    nativeClient.Connected+=()=>
    {
        Console.WriteLine("连接成功");
    };
}

解除订阅(Lambda表达式):无法解除

订阅(事件处理方法):

void ListenEvent()
{
    nativeClient.Connected+=HandleConnectedEvent;
}
void HandleConnectedEvent()
{
    Console.WriteLine("连接成功");
}

解除订阅(事件处理方法):

void ListenEvent()
{
    nativeClient.Connected-=HandleConnectedEvent;
}
void HandleConnectedEvent()
{
    Console.WriteLine("连接成功");
}