package main import ( "sync" "qiweimanager/logger" ) // 全局变量 var ( globalLogger *logger.Logger globalLoaderFuncs *LoaderFunctions loaderFuncsMutex sync.Mutex // ResponseMap 用于存储客户端ID和对应的响应通道 ResponseMap = make(map[int32]chan ClientResponseData) responseMapMu sync.Mutex // ResponseMap 用于存储客户端ID和对应的响应通道 globalClientMap = make(map[uint32]string) ) // LoaderFunctions 定义了从Loader DLL获取的所有函数指针 type LoaderFunctions struct { GetUserWxWorkVersion uintptr UseUtf8 uintptr UseRecvJsUnicode uintptr InitWxWorkSocket uintptr SetDataLocationPath uintptr InjectWxWork uintptr InjectWxWorkMultiOpen uintptr InjectWxWorkPid uintptr DestroyWxWork uintptr SendWxWorkData uintptr } // ClientResponseData 定义客户端响应数据结构 type ClientResponseData struct { ClientId int32 `json:"clientId"` Data map[string]interface{} `json:"data"` } // SetResponseChannel 为指定的客户端ID设置响应通道 func SetResponseChannel(clientId int32, ch chan ClientResponseData) { responseMapMu.Lock() ResponseMap[clientId] = ch responseMapMu.Unlock() } // GetResponseChannel 获取指定客户端ID的响应通道 func TrySetResponseChannel(clientId int32, ch chan ClientResponseData) bool { responseMapMu.Lock() defer responseMapMu.Unlock() if _, exists := ResponseMap[clientId]; exists { return false } ResponseMap[clientId] = ch return true } func GetResponseChannel(clientId int32) (chan ClientResponseData, bool) { responseMapMu.Lock() ch, exists := ResponseMap[clientId] responseMapMu.Unlock() return ch, exists } // RemoveResponseChannel 移除指定客户端ID的响应通道 func RemoveResponseChannel(clientId int32) { responseMapMu.Lock() delete(ResponseMap, clientId) responseMapMu.Unlock() }