Files
iotlcm/server/internal/library/event/event.go
T
MiFaZhan 2ed5dfa6a1 chore: 初始开源发布
iotlcm-app:小程序端 + 用户端服务。

- app/:uni-app 小程序前端(基于 unibest,MIT)
  - 微信 AppID → YOUR_WX_APPID,uni-app AppID → __UNI__YOURAPPID
  - 内网后端地址 → admin.iotlcm.example.com
  - 应用标题与 unibest 模板 README 重写(保留上游致谢与 MIT 声明)
- server/:GoFrame 用户端服务(基于 XiuAdmin,Apache-2.0)
  - module xiuadmin → git.5iot.com/iotlcm-public/iotlcm-app(360 文件)
  - 支付回调地址 → app.iotlcm.example.com,商户名与应用名泛化
  - 真实手机号 → 合法 11 位编造号(保留号段前 3 位 + 后 4 位)
  - 依赖号码尾部的断言同步更新
  - 补 server/LICENSE(Apache-2.0)
- 移除内部资产:CI 触发器
- 补根 README,LF 行尾 + .gitattributes

已知:TestSysDept_RefreshDeptAncestors 在源仓同一提交上同样失败,属既有缺陷。
2026-10-26 14:01:25 +08:00

76 lines
1.7 KiB
Go

// Package event
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package event
import (
"context"
"sync"
)
type EventCallbackFunc func(ctx context.Context, eventKey string, args ...interface{})
type sEvent struct {
sync.Mutex
eventList map[string][]EventCallbackFunc // 事件列表 [事件Key]:回调函数
}
var (
instance *sEvent
once sync.Once
)
// EventsInstance 事件实例
func EventsInstance() *sEvent {
once.Do(func() {
instance = &sEvent{
eventList: make(map[string][]EventCallbackFunc),
}
})
return instance
}
// Register 注册事件
func (e *sEvent) Register(eventKey interface{}, callback EventCallbackFunc) {
e.Lock()
defer e.Unlock()
eventKeyStr, ok1 := eventKey.(string)
eventKeyList, ok2 := eventKey.([]string)
if !ok1 && !ok2 {
return
}
if ok1 {
e.eventList[eventKeyStr] = append(e.eventList[eventKeyStr], callback)
} else {
for _, eventKey := range eventKeyList {
e.eventList[eventKey] = append(e.eventList[eventKey], callback)
}
}
}
// Call 回调事件
func (e *sEvent) Call(ctx context.Context, eventKey string, args ...interface{}) {
if events, ok := e.eventList[eventKey]; ok {
for _, f := range events {
f(ctx, eventKey, args...)
}
}
}
// Emit 触发事件
func (e *sEvent) Emit(ctx context.Context, eventKey string, args ...interface{}) {
e.Call(ctx, eventKey, args...)
}
// Remove 删除事件
func (e *sEvent) Remove(eventKey string) {
delete(e.eventList, eventKey)
}
// Clear 清空事件列表
func (e *sEvent) Clear() {
e.eventList = make(map[string][]EventCallbackFunc)
}