Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.

2 (1). 主框和实例化 (基础端)

DavidMeow edited this page Jan 13, 2023 · 2 revisions

2.0 主框的模样

Q: 什么是主框呢?

A : 因为您作为本SDK的调用方, 我们并不能确定您何时载入本程序以及处理程序,
所以需要您自动使用SDK内的流程进行处理, 本SDK的标准最简流程, 便称为主框

当然的, 您作为调用方, 需要在合适的地方添加本程序的主框进行注册.
本Wiki内, 我们假定您会生成一个控制台程序, 并且使用.net6的顶级语句,
则主框如下:

//在Program.cs内
Global.G_Debug_Flag = 3;
MeowMiraiLib.Client c = new("ws://ip:port/all?verifyKey=...&qq=...");
c.Connect();
//c.ConnectAsync()
c.OnFriendMessageReceive += (s, e) => { };
//c.事件 += (s,e) => { 处理函数 }
while (true) //阻塞控制台
{
    switch (System.Console.ReadLine()) // 控制台操作
    {
        //.....
    }
}

2.1 的实例化

Q: 那么 又是什么呢?

A: 是本SDK提供的方便接受和发送数据的一种实例,
您的程序需要通过这种实例来和您的后端交互, 以完成任务,

分为收信端发信端

2.1.1 一致的构造函数方案

MeowMiraiLib.Client c = new("ws://test.com.cn:8888/all?verifyKey=123456&qq=1234567");
MeowMiraiLib.Client c2 = new("test.com.cn", 8888, "123456", 1234567, "all");

2.1.2 我们建议的端实例化

方案为, 在顶级语句外进行实例化, 在顶级语句内引用.
例如在ClientX.cs文件内,实例化所有您需要使用的端.
您可以使用同时使用多个端, 或者重复链接一个端, 他们会自动组织Session和其他问题.
注:本教程后续的发送端均调用在这个类

//文件ClientX.cs
namespace Test
{
    public static class ClientX
    {
        //换成自己要用的参数
        public static MeowMiraiLib.Client c = new("ws://test.com.cn:8888/all?verifyKey=123456&qq=1234567");
        public static MeowMiraiLib.Client c2 = new("test.com.cn", 8888, "123456", 1234567, "all");
    }
}

顶级语句则变成如下写法:

using System;
using Test; //项目名
using static Test.ClientX;

Global.G_Debug_Flag = 3;
c.Connect();
c.OnFriendMessageReceive += MessageX.OnFriendMessageReceive;
//c.事件 += (s,e) => { 处理函数 }

while (true)
{
    switch (Console.ReadLine()) // 控制台操作
    {
        //.....
    }
}

2.2 FAQ

**1.端可以实例化多个么? **

A: 可以, 因为本SDK只负责交互, 而不负责怎么交互, 由您控制什么信息发给谁, 所以您也需要注意, 如果您尝试在多个端互相交互, 请确认您要发送的对象主体存在, 否则可能报错.

**2.端之间是否是线程安全的? **

A: 当前来讲, 端和端之间是孤立的, 并没有任何形式上的关系, 如果您在两个或多个端之间创造了所谓的共享缓冲区, 那对于共享缓冲区的线程安全由您的编程代码决定.

**3.端是由什么作为基底的? **

A: 我们使用 -WebSocket- (正向) 作为基底, 您的端是 Mirai后端的客户端, 而Mirai是服务端.

4.SDK内还引用了什么?

  1. JamesNK/Newtonsoft.Json 用于解析Json.
  2. kerryjiang/WebSocket4Net 用于建立WS信息.