Documentation ¶
Index ¶
- Variables
- func Clean(hooks []Hook)
- func DeclareEventId(eventTab IEventTab, pos int32) uint64
- func DeclareEventIdT[T any](pos int32) uint64
- func DeclareEventTabId(eventTab IEventTab) uint64
- func DeclareEventTabIdT[T any]() uint64
- func MakeEventId(eventTab IEventTab, pos int32) uint64
- func MakeEventIdT[T any](pos int32) uint64
- func MakeEventTabId(eventTab IEventTab) uint64
- func MakeEventTabIdT[T any]() uint64
- func Unbind(event IEvent, subscriber any)
- func UnsafeEvent(event IEvent) _UnsafeEventdeprecated
- type CombineEventTab
- type Event
- type EventRecursion
- type Hook
- type IEvent
- type IEventCtrl
- type IEventTab
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrEvent = fmt.Errorf("%w: event", exception.ErrTiny) // 事件错误 ErrArgs = exception.ErrArgs // 参数错误 )
View Source
var ( // EventRecursionLimit 事件递归次数上限,超过此上限会panic EventRecursionLimit = int32(128) )
Functions ¶
func DeclareEventId ¶
DeclareEventId 声明事件Id
func DeclareEventTabId ¶
DeclareEventTabId 声明事件表Id
func UnsafeEvent
deprecated
func UnsafeEvent(event IEvent) _UnsafeEvent
Deprecated: UnsafeEvent 访问事件内部方法
Types ¶
type CombineEventTab ¶
type CombineEventTab []IEventTab
CombineEventTab 联合事件表,可以将多个事件表联合在一起,方便管理多个事件表
func (*CombineEventTab) Init ¶
func (c *CombineEventTab) Init(autoRecover bool, reportError chan error, recursion EventRecursion, managed pool.ManagedPooledChunk)
Init 初始化事件
type Event ¶
type Event struct {
// contains filtered or unexported fields
}
Event 事件
func (*Event) Init ¶
func (event *Event) Init(autoRecover bool, reportError chan error, eventRecursion EventRecursion, managed pool.ManagedPooledChunk)
Init 初始化事件
type EventRecursion ¶
type EventRecursion int32
EventRecursion 发生事件递归时的处理方式(事件递归:事件发送过程中,在订阅者的逻辑中,再次发送这个事件)
const ( EventRecursion_Allow EventRecursion = iota // 允许事件递归,可能会无限递归 EventRecursion_Disallow // 不允许事件递归,递归时会panic EventRecursion_Discard // 丢弃递归的事件,不会再发送给任何订阅者 EventRecursion_Truncate // 截断递归的事件,不会再发送给当前订阅者,但是会发送给其他订阅者 EventRecursion_Deepest // 深度优先处理递归的事件,会中断当前事件发送过程,并在新的事件发送过程中,不会再次发送给这个订阅者 )
type Hook ¶
type Hook struct {
// contains filtered or unexported fields
}
Hook 事件钩子,主要用于重新绑定或解除绑定事件,由BindEvent()创建并返回,请勿自己创建
type IEvent ¶
type IEvent interface {
// contains filtered or unexported methods
}
IEvent 事件接口
定义事件:
1.按以下格式编写一个接口,即完成事件的定义: type Event{事件名} interface { On{事件名}({参数列表}) } 2.在定义事件的源码文件(.go)头部添加以下注释,在编译前自动化生成代码: //go:generate go run git.golaxy.org/tiny/event/eventc event
定义事件的选项(添加到定义事件的注释里):
1.发送事件代码的可见性 +event-gen:export=[0,1] 2.是否生成简化绑定事件代码 +event-gen:auto=[0,1]
使用事件:
1.事件一般作为组件的成员,在组件Awake时初始化,组件Dispose时关闭,示例如下: type Comp struct { ec.ComponentBehavior event{事件名} event.Event } func (c *Comp) Awake() { runtime.Current(c).ActivateEvent(&c.event{事件名}, event.EventRecursion_Discard) } func (c *Comp) Dispose() { c.event{事件名}.Close() }
订阅事件:
1.在组件的成员函数,编写以下代码: func (c *Comp) On{事件名}({参数列表}) { ... } 2.在需要订阅事件时,编写以下代码: func (c *Comp) MethodXXX() { {事件定义包名}.Bind{事件名}({发布者}, c) } 3.如果订阅者生命周期小于发布者,那么需要记录hook并且在Dispose时解除绑定,示例如下: type Comp struct { ec.ComponentBehavior hook event.Hook } func (c *Comp) MethodXXX() { c.hook = {事件定义包名}.Bind{事件名}({发布者}, c) } func (c *Comp) Dispose() { c.hook.Unbind() } 4.如果不想写代码记录hook,可以使用ComponentBehavior的AutoHooks()来记录hook,在组件销毁时会自动解除绑定
type IEventCtrl ¶
type IEventCtrl interface { // Init 初始化事件 Init(autoRecover bool, reportError chan error, recursion EventRecursion, managed pool.ManagedPooledChunk) // Open 打开事件 Open() // Close 关闭事件 Close() // Clean 清除全部订阅者 Clean() }
IEventCtrl 事件控制接口
type IEventTab ¶
type IEventTab interface { IEventCtrl // Get 获取事件 Get(id uint64) IEvent }
IEventTab 事件表接口,方便管理多个事件
使用方式:
1.在定义事件的源码文件(.go)头部添加以下注释,在编译前自动化生成代码: //go:generate go run git.golaxy.org/tiny/event/eventc eventtab --name={事件表名称}
定义事件的选项(添加到定义事件的注释里):
1.事件表初始化时,该事件使用的递归处理方式,不填表示使用事件表初始化参数值 +event-tab-gen:recursion=[allow,disallow,discard,truncate,deepest]
Source Files ¶
Click to show internal directories.
Click to hide internal directories.