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

3 (2). 全局端信息处理

DavidMeow edited this page Jan 14, 2023 · 6 revisions

3.6 什么是全局端

  • 全局端是在程序Global定义域内的一个驻留(static)内存空间, 用于在程序开始到程序结束之间一直保存某个端的信息,
  • 如果您只使用一个端进行收(主要是发), 不进行多端交互, 您就可以使用全局端

3.6.1 为什么要使用全局端?

  • 因为当开发时, 按照原版( <= 8.0.0 )写法需要在每个发信的信息后面标明发信端是谁
  • 然而大部分开发者并不使用多个端的功能, 所以我决定精简发信的函数写法.

3.6.2 全局端跟之前的端有什么区别?

  • 主要目的是您可以简化发送信息的函数写法
new Message[] { new Plain($"Hello") }.SendToFriend(123456, Client.c); //原写法

new Message[] { new Plain($"Hello") }.SendToFriend(123456); //现写法

//如果您需要发送到另一个端,您仍然可以在后面加上别的端的对象
new Message[] { new Plain($"Hello") }.SendToFriend(123456, Client.b1);
  • 如果您只使用一个端进行收发动作, 您可以取消自己定义的ClientX类, 直接使用全局端 即可.
  • 如果您仍然使用多端交互, 但是仅用一个端发信, 那您也可以使用全局端, 使用 全局端进行发信 参照上方写法
  • 如果您需要多端交互, 但是每个端发信很平均, 那您不需要更改您的代码

3.7 使用全局端

3.7.1 定义全局端

Global.G_Client = new Client(.....);
//依照如此定义, 您的所有发送信息位置均无需后缀端名称, 当程序检测到您留空参数时, 将会自动使用全局端.
  • 注: 如果您未定义全局端留空参数, 则会抛出 异常 2000

3.7.2 使用全局端发信

  • 正如上方描述, 您的所有发信的函数只需要将Client参数留空即可,或者传入Null

3.7.3 使用全局端收信

  • 您只需要更改您原来的签名到Global.G_Client即可, 如下例:
//原写法
var a = new Client(....);
a.Connect();
a.OnFriendMessageRecieve += (s,e) => {
....
    if(.....){
        new Message[] { new Plain($"Hello") }.SendToFriend(123456, a); //←
    }
....
}
....

//现写法
Global.G_Client = new Client(....); //←
Global.G_Client.Connect(); //←
Global.G_Client.OnFriendMessageRecieve += (s,e) => {
....
    if(.....){
        new Message[] { new Plain($"Hello") }.SendToFriend(123456); //←
    }
....
}