发布 emitter 扩展库,用于多个对象互相通信

By terrorist at 2022-05-30 • 0人收藏 • 744人看过

库地址: https://github.com/btx638/aaz-aardio/tree/master/aaz/emitter


创建类

emitter()  参数为空,创建匿名组,对象自己内部使用

emitter("组名")  加入特定的通讯组,多个对象互相通讯

emitter("组名", "用户名")  加入特定的通讯组,并指定自己的用户名


对象方法

on("事件名称", 事件处理函数)  订阅特定的事件,并指定事件处理函数

on("事件名称",  "用户名", 事件处理函数)  订阅特定的事件,仅接收指定用户名发出的事件,并指定事件处理函数

emit("事件名称", 不定参数) 触发特定的事件,并把参数传递给事件处理函数


io.open()

import aaz.emitter;

class clsA{
	ctor(){
		// 加入组并指定用户名,则 emit 消息时自带用户名
		var emitter = ..aaz.emitter("组名", "用户A")
		// 只接收组里的 用户C 的消息
		emitter.on("聊天", "用户C", function(str){
			..io.print("A收到C聊天:" ++ str)	
		})
	};
	
}

class clsB{
	ctor( ){
		// 只入组且不指定用户名, 则 emit 消息时不含用户名
		var emitter = ..aaz.emitter("组名")	
		// 因为不指定信息发送者,则收到组的所有消息
		emitter.on("聊天", function(str){
			..io.print("B收到聊天:" ++ str)	
		})	
	};
}

class clsC{
	ctor(){
		// 加入组并指定用户名,则 emit 消息时自带用户名
		var emitter = ..aaz.emitter("组名", "用户C")	
	};
	talk = function(str){
		// 发送消息到组, 并且包含用户名
		emitter.emit("聊天",str)
	}
	
}

var objA = clsA()
var objB = clsB()
var objC = clsC()

// 用户C 发布了一个消息
objC.talk( "吃了吗")

execute("pause")


4 个回复 | 最后更新于 2022-06-11
2022-05-31   #1

有点跟不上节奏啊。。。

2022-06-01   #2

2022-06-02   #3

实列一: 匿名组

import console
import aaz.emitter

class cls{
	ctor(){
		// 参数为空,创建匿名事件组,仅限对象自己使用
		this = ..aaz.emitter()
	};
	go = function(param){
		// 触发事件
		this.emit("go", param)
		
		return true; 
	}
}

var obj = cls()

// 订阅事件
obj.on("go",function(param){
	console.log("go 事件触发了", "参数:", param )
})

obj.go("aaaa")

execute("pause")


2022-06-11   #4

同线程内有原生的publish和subscribe函数
跨线程有thread.command
跨进程有process.command

感谢分享!

登录后方可回帖

登 录
信息栏
公 告:

专注分享

谢绝纯提问

谢谢合作!
本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...