使用篇三,消息模块

模块的开始

从这里开始,我们要开始注入模块了
今天、我们先来注入一个消息模块
消息模块是干啥的?
	1、发送消息
	2、解耦
	3、貌似没了

话不多说,上码


    public class MessageExample : Test
    {
        public interface IPub { }
        public class Pub : IPub { }
        public class Listenner : IMessageListener
        {
            public Listenner()
            {
                Framework.env0.modules.Message.Subscribe<IPub>(Listen);
                Framework.env0.modules.Message.Subscribe<MessageExample>(this);
            }
            public void Listen(IMessage message)
            {
                Log.L(string.Format("Recieve code {0} by type {1}", message.code, message.subject));
            }
        }


        protected override void Start()
        {
            Listenner listenner = new Listenner();
            Log.L("不要太频繁按键,因为 1秒 检测一次按键");
            //Framework.env0.modules.Message.fitSubType = false;
            Framework.env0.modules.Message.processesPerFrame = 1;
            IMessage message = null;
            message = Framework.env0.modules.Message.Publish<Pub>(null)
                .SetCode(100)
                .OnRecycle((msg)=> {
                    Log.L($"equals  {message == msg}");
                    Log.L($"state  {msg.state}   err   {msg.errorCode}");

                    Log.L("\n\n");
                    Log.L("开始按键");
                });
            Log.L(string.Format("the position is {0} priority is {1}", message.position, message.priority)); 
        }

        protected override void Update()
        {
            var key = Console.ReadKey();
            Log.L($"检测到按键  {key.Key} 并且发送消息 ,  按键序号为    {(int)key.Key}");
            Log.L($"剩余消息条数  {Framework.env0.modules.Message.count}");
            for (int i = 0; i < 2; i++)
            {
                Framework.env0.modules.Message.PublishByNumber(this, null, (int)key.Key - i)
                    .SetCode((int)key.Key - i)
                    .OnRecycle((msg) => {
                        Log.L($"state  {msg.state}   err   {msg.errorCode}");
                    });
            }
        }

        protected override void Stop()
        {
        }
    }

解析

	0、这次的🐎有点长
	1、声明  IPub 接口
	2、声明 Pub 类 继承自 IPub 接口
	3、声明一个 Listenner,去监听 IPub 类型 与 MessageExample 类型
	4、对消息模块做一些设置    一帧只处理一次
	5、发布 Pub 类型消息一个
	6、 在帧函数 内检测到按键,就发消息
	
让我们来看看输出

在这里插入图片描述

      我们可以发现 先收到了 Pub  类型的消息
      Why?为什么会收到? 我们明明只是注册了 IPub   类型,悲伤那么大
      		阐述: Pub  类型继承自 IPub   
      			消息模块默认会去匹配子类型    Pub  是 IPub  子类型
      		如果不需要此功能?
      		    消息模块 有一个属性  fitSubType  置为 false 即可
    
     下面就是 检测到按键,然后发出的消息
     因为我们设置了一帧只执行一个,
     所以我们可以看到两个执行时间不一样
     
    你可能会问,这写消息都滞后了,我想立刻执行怎么办?
    考虑到了
      		在消息模块的发布方法中,有一个参数叫做优先级
      		通过优先级可以控制消息的先后,优先级很多 ,如下图

在这里插入图片描述
在这里插入图片描述

结束

这个消息模块主要功能就只有注册和发布
另外的功能呢是根据消息队列的理念造的
消息队列是什么?卧槽!!!!
hey hey hey
请听 后续 分解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值