mirror of
https://github.com/shadow1ng/fscan.git
synced 2026-09-22 03:10:42 +08:00
54 lines
1.2 KiB
Go
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
|
|
}
|