Files
fscan/common/callback.go
T
2026-05-18 14:41:15 +08:00

54 lines
1.2 KiB
Go

package common
import "sync"
// ResultCallback 扫描结果回调函数类型
type ResultCallback func(result interface{})
var (
resultCallback ResultCallback
callbackMu sync.RWMutex
)
// SetResultCallback 设置结果回调函数(Web模式使用)
func SetResultCallback(cb ResultCallback) {
callbackMu.Lock()
defer callbackMu.Unlock()
resultCallback = cb
}
// ReplaceResultCallback temporarily replaces the result callback and returns a
// restore function. This is useful for embedded callers that need to collect
// structured results without permanently stealing the callback from another
// subsystem.
func ReplaceResultCallback(cb ResultCallback) func() {
callbackMu.Lock()
previous := resultCallback
resultCallback = cb
callbackMu.Unlock()
return func() {
callbackMu.Lock()
resultCallback = previous
callbackMu.Unlock()
}
}
// NotifyResult 通知结果给回调函数
func NotifyResult(result interface{}) {
callbackMu.RLock()
cb := resultCallback
callbackMu.RUnlock()
if cb != nil {
cb(result)
}
}
// ClearResultCallback 清除结果回调函数
func ClearResultCallback() {
callbackMu.Lock()
defer callbackMu.Unlock()
resultCallback = nil
}