前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Newbe.Mahua 插件热更新

Newbe.Mahua 插件热更新

作者头像
newbe36524
发布2020-03-16 11:28:13
5140
发布2020-03-16 11:28:13
举报
文章被收录于专栏:newbe36524的技术专栏

本教程阐述如何在使用 Newbe.Mahua 开发插件时使用”插件热更新”技术。

软硬条件

IDE

VS2017.5

Newbe.Mahua

1.11

项目基础

在阅读本教程之前,想必开发者已经学会了如何插件插件项目。因此本节只将本示例使用的关键参数和代码贴出。

本插件项目名称使用Newbe.Mahua.Samples.HotUpdate,使用Newbe.Mahua.Plugins.Template模板。

PluginInfo.cs文件内容:

代码语言:javascript
复制
namespace Newbe.Mahua.Samples.HotUpdate
{
    /// <summary>
    /// 本插件的基本信息
    /// </summary>
    public class PluginInfo : IPluginInfo
    {
        /// <summary>
        /// 版本号,建议采用 主版本.次版本.修订号 的形式
        /// </summary>
        public string Version { get; set; } = "1.0.0";

        /// <summary>
        /// 插件名称
        /// </summary>

        public string Name { get; set; } = "Newbe.Mahua.Samples.HotUpdate";

        /// <summary>
        /// 作者名称
        /// </summary>
        public string Author { get; set; } = "Newbe";

        /// <summary>
        /// 插件Id,用于唯一标识插件产品的Id,至少包含 AAA.BBB.CCC 三个部分
        /// </summary>
        public string Id { get; set; } = "Newbe.Mahua.Samples.HotUpdate";

        /// <summary>
        /// 插件描述
        /// </summary>
        public string Description { get; set; } = "Newbe.Mahua.Samples.HotUpdate";
    }
}

新建一个好友消息处理事件(不要忘记注册):

代码语言:javascript
复制
using Newbe.Mahua.MahuaEvents;

namespace Newbe.Mahua.Samples.HotUpdate.MahuaEvents
{
    /// <summary>
    /// 来自好友的私聊消息接收事件
    /// </summary>
    public class PrivateMessageMahuaEventV1
        : IPrivateMessageReceivedMahuaEvent
    {
        private readonly IMahuaApi _mahuaApi;

        public PrivateMessageMahuaEventV1(
            IMahuaApi mahuaApi)
        {
            _mahuaApi = mahuaApi;
        }

        public void ProcessPrivateMessage(PrivateMessageReceivedContext context)
        {
            _mahuaApi.SendPrivateMessage(context.FromQq)
                .Text("嘤嘤嘤 v1")
                .Done();
        }
    }
}

运行build.bat生成插件文件,复制到机器人平台启动。

那么当向机器人发送任意消息时,将会得到 “嘤嘤嘤 v1” 的回复。

开始体验热更新

在上一节项目的基础上,我们再增加一个好友消息处理事件(不要忘记注册):

代码语言:javascript
复制
using Newbe.Mahua.MahuaEvents;

namespace Newbe.Mahua.Samples.HotUpdate.MahuaEvents
{
    /// <summary>
    /// 来自好友的私聊消息接收事件
    /// </summary>
    public class PrivateMessageMahuaEventV2
        : IPrivateMessageReceivedMahuaEvent
    {
        private readonly IMahuaApi _mahuaApi;

        public PrivateMessageMahuaEventV2(
            IMahuaApi mahuaApi)
        {
            _mahuaApi = mahuaApi;
        }
        public void ProcessPrivateMessage(PrivateMessageReceivedContext context)
        {
            _mahuaApi.SendPrivateMessage(context.FromQq)
                .Text("嘤嘤嘤 v2")
                .Done();
        }
    }
}

运行build.bat生成插件文件。

注意!从这步开始之后不一样了。

进入生成了对应平台的文件夹,文件夹中包含一个文件夹名称为YUELUO的文件夹。

该文件夹就是”插件热更新”的核心文件夹。

将YUELUO文件夹,复制到对应的机器人平台根目录

通过 LogView 日志查看器,便可以看到热更新已经启动。

经过一段时间的等待后,热更新将会结束。

此时,向机器人发送任意消息时,将会得到 “嘤嘤嘤 v1” 和 “嘤嘤嘤 v2” 的两条回复即表示热更新已经成功。

YUELUO 是 You unknow every lucky ubuntu owner 的缩写。摘自某论坛上centos使用者对ubuntu使用者的嘲讽。绝对没有月落的意思

其他注意点

开始热更新事件 IPluginHotUpgradingMahuaEvent

开发者可以订阅”开始热更新事件”,在插件开始热更新时进行一些操作。并且能够通过参数控制是否取消热更新。

以下便是一个订阅的例子,该示例将允许在奇数秒进行热更新,偶数秒阻止热更新:

代码语言:javascript
复制
using Newbe.Mahua.MahuaEvents;
using System;

namespace Newbe.Mahua.Samples.HotUpdate.MahuaEvents
{
    public class PluginHotUpgradingMahuaEvent : IPluginHotUpgradingMahuaEvent
    {
        public void HotUpgrading(
            PluginHotUpgradingContext context)
        {
            if (DateTime.Now.Second % 2 == 0)
            {
                context.Canceled = true;
                context.Reason = "月老板说,该时辰不利于更新!";
            }
        }
    }
}

热更新成功事件 IPluginHotUpgradedMahuaEvent

开发者可以订阅”热更新成功事件”,在插件热更新成功时进行一些操作。若在”开始热更新事件”中取消了热更新,将不会触发该事件。

以下便是一个订阅的例子,该示例将在热更新成功之后输出一条日志:

代码语言:javascript
复制
using Newbe.Mahua.Logging;
using Newbe.Mahua.MahuaEvents;

namespace Newbe.Mahua.Samples.HotUpdate.MahuaEvents
{
    public class PluginHotUpgradedMahuaEvent : IPluginHotUpgradedMahuaEvent
    {
        private static readonly ILog Logger = LogProvider.For<PluginHotUpgradedMahuaEvent>();

        public void HotUpgraded(PluginHotUpgradedContext context)
        {
            Logger.Info("更新完毕,感谢月落大佬的奇妙点子");
        }
    }
}

插件初始化事件 IInitializationMahuaEvent

该事件原本在插件机器人初始化插件时,将会进行调用。

同时,在热更新成功之后,也将再次触发此事件。

热更新过程中的消息

热更新开始后,将会将后续接收的所有的消息进行暂存,在热更新成功之后发送后热更新之后的插件进行处理。

热回滚

其实只要将文件夹自行备份就能够自己实现热回滚功能。

示例代码

本教程中的所有示例代码,都可以在以下链接获取:

https://github.com/newbe36524/Newbe.Mahua.Framework/tree/master/src/Newbe.Mahua.Samples.HotUpdate

教程链接

发布说明

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-022,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软硬条件
  • 项目基础
  • 开始体验热更新
  • 其他注意点
    • 开始热更新事件 IPluginHotUpgradingMahuaEvent
      • 热更新成功事件 IPluginHotUpgradedMahuaEvent
        • 插件初始化事件 IInitializationMahuaEvent
          • 热更新过程中的消息
            • 热回滚
            • 示例代码
            • 教程链接
            • 发布说明
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档