예제 #1
0
        IMessageModule messageModule; //消息模块
        protected override void Start()
        {
            //获取消息模块
            messageModule = Framework.GetEnv(EnvironmentType.Ev0).modules.Message;

            Log.L("设置可以监听注册的类型的所有子类型");
            messageModule.fitSubType = true;
            Log.L("设置每帧处理的消息量为1");
            messageModule.processesPerFrame = 1;

            Log.L("");
            Log.L("注册监听使用消息模块的Subscribe方法");
            Log.L("Subscribe方法可以对一个监听器进行注册,也可以对单独的委托方法进行注册");
            Log.L("注意:使用监听器为参数注册的实质是注册了监听器的Listen方法");
            Log.L("");
            Log.L("在消息监听器的构造函数中就可以直接设置对IPub和MessageExample的监听");
            Log.L("开始实例化一个消息监听器");

            Listener listenner = new Listener(); //实例化一个消息监听器

            Log.L("");

            Log.L("使用消息模块的UnSubscribe方法可以对监听取消注册");
            //可以对监听器实例进行解绑
            messageModule.UnSubscribe <IPub>(listenner);
            //也可以对监听器里的Listen回调方法进行解绑
            messageModule.UnSubscribe <IPub>(listenner.Listen);
            Log.L("已取消对IPub和MessageExample的监听");

            Log.L("");

            Log.L("也可以用重载的非泛型的Subscribe方法注册监听,取消监听也一样有非泛型的方法");
            messageModule.Subscribe(typeof(IPub), listenner);
            messageModule.Subscribe(typeof(MessageExample), listenner.Listen);

            Log.L("已重新对IPub和MessageExample的消息监听进行注册");
            Log.L("");

            Log.L("以Pub的名义发送一个消息值为100的消息");
            messageModule.Publish <Pub>(null)
            .SetCode(100)
            .OnCompelete((msg) =>
            {
                Log.L("可以看到我们只监听了IPub但是还是收到了Pub的消息");
                Log.L($"当前消息的状态为{msg.state}   错误码为{msg.errorCode}");
                Log.L("");
                Log.L("发送的消息可以添加MessageUrgencyType参数来提高优先级");
                Log.L("紧急程度为立即的消息不受processesPerFrame规则影响");
                Log.L("----------------开始按键----------------");
                Log.L("按键之后将分别发送三条普通、三条不重要、三条非常紧急、一条立即");
                Log.L("然后再以异步的方式发送一条重要的消息");
            });
        }
예제 #2
0
        /// <summary>
        /// 发送三条普通、三条不重要、三条非常紧急程度的消息
        /// </summary>
        private void SendMessage()
        {
            for (int i = 0; i < 3; i++)
            {
                messageModule.Publish(this, null, MessageUrgencyType.Common).SetCode(i + 1);
            }
            Log.L("已发送紧急类型为普通的三条消息");
            for (int i = 0; i < 3; i++)
            {
                messageModule.Publish <MessageExample>(null, MessageUrgencyType.Unimportant).SetCode(i + 4);
            }
            Log.L("已发送紧急类型为不重要的三条消息");
            for (int i = 0; i < 3; i++)
            {
                messageModule.Publish(this, null, MessageUrgencyType.VeryUrgent).SetCode(i + 7);
            }
            Log.L("已发送紧急类型为非常紧急的三条消息");

            messageModule.PublishByNumber(this, null, MessageUrgency.Immediately);
            Log.L("已发送紧急类型为立即的一条消息");
            Log.L("立即执行的消息不在等待队列中,因此无法设置值\n");
        }