XEvent

package
v0.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2025 License: MIT Imports: 4 Imported by: 0

README

XEvent

Reference Release Report DeepWiki

XEvent 是一个轻量级的事件管理器,支持多重监听、单次回调和批量通知等功能。

功能特性

  • 多重监听:可配置是否允许同一事件注册多个回调
  • 单次执行:可设置回调函数仅执行一次后自动注销

使用手册

1. 事件管理
1.1 创建管理器
// 创建一个支持多重注册的事件管理器
mgr := XEvent.NewManager(true)

// 获取共享的事件管理器
mgr := XEvent.Shared()
1.2 注册事件
// 注册事件处理程序
mgr.Reg(1001, func(args ...any) {
    // 处理事件
})

// 注册只执行一次的处理程序
mgr.Reg(1001, func(args ...any) {
    // 处理事件
}, true)
1.3 注销事件
// 注销指定的事件处理程序
mgr.Unreg(1001, handler)

// 注销事件的所有处理程序
mgr.Unreg(1001)
1.4 通知事件
// 通知事件(不带参数)
mgr.Notify(1001)

// 通知事件(带参数)
mgr.Notify(1001, "param1", 123)

常见问题

1. 事件处理程序的注册限制
  1. 默认模式(Multiple=false):

    • 每个事件 ID 只能注册一个处理程序
    • 重复注册会返回 false
  2. 多重模式(Multiple=true):

    • 每个事件 ID 可以注册多个处理程序
    • 按注册顺序依次执行
2. 事件通知的执行顺序
  1. 同步执行:

    • 处理程序按注册顺序依次执行
    • 每个处理程序在当前 goroutine 中执行
  2. 异常处理:

    • 自动捕获处理程序中的异常
    • 不影响其他处理程序的执行
3. 对象池的使用说明
  1. 对象复用:

    • 事件包装器(EvtWrap)和处理程序包装器(HndWrap)使用对象池
    • 注销事件时自动回收对象到池中
  2. 性能优化:

    • 减少内存分配和 GC 压力
    • 适合高频事件处理场景

更多问题,请查阅问题反馈

项目信息

Documentation

Overview

XEvent 是一个轻量级的事件管理器,支持多重监听、单次回调和批量通知等功能。

功能特性

  • 多重监听:可配置是否允许同一事件注册多个回调
  • 单次执行:可设置回调函数仅执行一次后自动注销

使用手册

1. 事件管理

1.1 创建管理器

// 创建一个支持多重注册的事件管理器
mgr := XEvent.NewManager(true)

// 获取共享的事件管理器
mgr := XEvent.Shared()

1.2 注册事件

// 注册事件处理程序
mgr.Reg(1001, func(args ...any) {
	// 处理事件
})

// 注册只执行一次的处理程序
mgr.Reg(1001, func(args ...any) {
	// 处理事件
}, true)

1.3 注销事件

// 注销指定的事件处理程序
mgr.Unreg(1001, handler)

// 注销事件的所有处理程序
mgr.Unreg(1001)

1.4 通知事件

// 通知事件(不带参数)
mgr.Notify(1001)

// 通知事件(带参数)
mgr.Notify(1001, "param1", 123)

更多信息请参考模块文档。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Callback

type Callback func(args ...any)

Callback 定义了事件处理函数的类型。

type EvtWrap

type EvtWrap struct {
	ID   int
	Hnds []*HndWrap
}

EvtWrap 包装了特定事件 ID 的事件处理程序。

type HndWrap

type HndWrap struct {
	Func Callback
	Ptr  uintptr
	Once bool
}

HndWrap 包装了一个事件处理程序。

type Manager

type Manager struct {
	sync.Mutex
	Multiple bool
	Events   map[int]*EvtWrap
}

Manager 管理事件的注册和通知。

func NewManager

func NewManager(multiple bool) *Manager

NewManager 创建一个新的 Manager 实例。

func Shared

func Shared() *Manager

func (*Manager) Clear

func (mgr *Manager) Clear()

Clear 清除所有注册的事件和处理程序。

func (*Manager) Get

func (mgr *Manager) Get(eid int) *EvtWrap

Get 获取给定事件 ID 的事件包装器。

func (*Manager) Notify

func (mgr *Manager) Notify(eid int, args ...any) bool

Notify 通知所有为给定事件 ID 注册的处理程序。

func (*Manager) Reg

func (mgr *Manager) Reg(eid int, handler Callback, once ...bool) bool

Reg 为给定的事件 ID 注册一个新的事件处理程序。

func (*Manager) Unreg

func (mgr *Manager) Unreg(eid int, handler ...Callback) bool

Unreg 为给定的事件 ID 注销一个事件处理程序。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL