Skip to content
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@
- `Init()` 不再隐式应用默认全局配置,仅在显式传入对应 `WithXxx` 时才会调用设置。
- `defaultInitConfig()` 已移除,`Init()` 现在直接使用 `initConfig{}` 初始化。
- `WithPluginPaths` 会对输入切片进行拷贝,避免外部后续修改影响已构建的选项。
- `Init()` 与 `Release()` 现为幂等操作:重复初始化或在未初始化状态下释放都会直接返回 `nil`;原导出的 `ErrAlreadyInitialized`、`ErrNotInitialized` 已移除。
- `Init()` 过程中若某个原生库加载失败,会自动释放此前已成功加载的库,避免残留半初始化状态。
- `LibraryLoadError` 现在会稳定包含库名与尝试加载的完整路径,便于排查动态库装载问题。

#### Toolkit

Expand Down
2 changes: 1 addition & 1 deletion internal/buffer/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
)

func TestMain(m *testing.M) {
native.Init("")
native.Initialize("")

Comment thread
dongwlin marked this conversation as resolved.
os.Exit(m.Run())
}
57 changes: 39 additions & 18 deletions internal/native/agent_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (

var maaAgentClient uintptr

const maaAgentClientName = "MaaAgentClient"

var (
MaaAgentClientCreateV2 func(identifier uintptr) uintptr
MaaAgentClientCreateTcp func(port uint16) uintptr
Expand All @@ -28,14 +30,32 @@ var (
MaaAgentClientGetCustomActionList func(client uintptr, buffer uintptr) bool
)

var agentClientEntries = []Entry{
{&MaaAgentClientCreateV2, "MaaAgentClientCreateV2"},
{&MaaAgentClientCreateTcp, "MaaAgentClientCreateTcp"},
{&MaaAgentClientDestroy, "MaaAgentClientDestroy"},
{&MaaAgentClientIdentifier, "MaaAgentClientIdentifier"},
{&MaaAgentClientBindResource, "MaaAgentClientBindResource"},
{&MaaAgentClientRegisterResourceSink, "MaaAgentClientRegisterResourceSink"},
{&MaaAgentClientRegisterControllerSink, "MaaAgentClientRegisterControllerSink"},
{&MaaAgentClientRegisterTaskerSink, "MaaAgentClientRegisterTaskerSink"},
{&MaaAgentClientConnect, "MaaAgentClientConnect"},
{&MaaAgentClientDisconnect, "MaaAgentClientDisconnect"},
{&MaaAgentClientConnected, "MaaAgentClientConnected"},
{&MaaAgentClientAlive, "MaaAgentClientAlive"},
{&MaaAgentClientSetTimeout, "MaaAgentClientSetTimeout"},
{&MaaAgentClientGetCustomRecognitionList, "MaaAgentClientGetCustomRecognitionList"},
{&MaaAgentClientGetCustomActionList, "MaaAgentClientGetCustomActionList"},
}

func initAgentClient(libDir string) error {
libName := getMaaAgentClientLibrary()
libPath := filepath.Join(libDir, libName)

handle, err := openLibrary(libPath)
if err != nil {
return &LibraryLoadError{
LibraryName: "MaaAgentClient",
LibraryName: maaAgentClientName,
LibraryPath: libPath,
Err: err,
}
Expand All @@ -62,23 +82,24 @@ func getMaaAgentClientLibrary() string {
}

func registerAgentClient() {
purego.RegisterLibFunc(&MaaAgentClientCreateV2, maaAgentClient, "MaaAgentClientCreateV2")
purego.RegisterLibFunc(&MaaAgentClientCreateTcp, maaAgentClient, "MaaAgentClientCreateTcp")
purego.RegisterLibFunc(&MaaAgentClientDestroy, maaAgentClient, "MaaAgentClientDestroy")
purego.RegisterLibFunc(&MaaAgentClientIdentifier, maaAgentClient, "MaaAgentClientIdentifier")
purego.RegisterLibFunc(&MaaAgentClientBindResource, maaAgentClient, "MaaAgentClientBindResource")
purego.RegisterLibFunc(&MaaAgentClientRegisterResourceSink, maaAgentClient, "MaaAgentClientRegisterResourceSink")
purego.RegisterLibFunc(&MaaAgentClientRegisterControllerSink, maaAgentClient, "MaaAgentClientRegisterControllerSink")
purego.RegisterLibFunc(&MaaAgentClientRegisterTaskerSink, maaAgentClient, "MaaAgentClientRegisterTaskerSink")
purego.RegisterLibFunc(&MaaAgentClientConnect, maaAgentClient, "MaaAgentClientConnect")
purego.RegisterLibFunc(&MaaAgentClientDisconnect, maaAgentClient, "MaaAgentClientDisconnect")
purego.RegisterLibFunc(&MaaAgentClientConnected, maaAgentClient, "MaaAgentClientConnected")
purego.RegisterLibFunc(&MaaAgentClientAlive, maaAgentClient, "MaaAgentClientAlive")
purego.RegisterLibFunc(&MaaAgentClientSetTimeout, maaAgentClient, "MaaAgentClientSetTimeout")
purego.RegisterLibFunc(&MaaAgentClientGetCustomRecognitionList, maaAgentClient, "MaaAgentClientGetCustomRecognitionList")
purego.RegisterLibFunc(&MaaAgentClientGetCustomActionList, maaAgentClient, "MaaAgentClientGetCustomActionList")
for _, entry := range agentClientEntries {
purego.RegisterLibFunc(entry.ptrToFunc, maaAgentClient, entry.name)
}
}

func releaseAgentClient() error {
err := unloadLibrary(maaAgentClient)
if err != nil {
return err
}

unregisterAgentClient()

return nil
}

func unregisterAgentClient() error {
return unloadLibrary(maaAgentClient)
func unregisterAgentClient() {
for _, entry := range agentClientEntries {
clearFuncVar(entry.ptrToFunc)
}
}
47 changes: 34 additions & 13 deletions internal/native/agent_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (

var maaAgentServer uintptr

const maaAgentServerName = "MaaAgentServer"

var (
MaaAgentServerRegisterCustomRecognition func(name string, recognition MaaCustomRecognitionCallback, transArg unsafe.Pointer) bool
MaaAgentServerRegisterCustomAction func(name string, action MaaCustomActionCallback, transArg unsafe.Pointer) bool
Expand All @@ -24,14 +26,27 @@ var (
MaaAgentServerDetach func()
)

var agentServerEntries = []Entry{
{&MaaAgentServerRegisterCustomRecognition, "MaaAgentServerRegisterCustomRecognition"},
{&MaaAgentServerRegisterCustomAction, "MaaAgentServerRegisterCustomAction"},
{&MaaAgentServerAddResourceSink, "MaaAgentServerAddResourceSink"},
{&MaaAgentServerAddControllerSink, "MaaAgentServerAddControllerSink"},
{&MaaAgentServerAddTaskerSink, "MaaAgentServerAddTaskerSink"},
{&MaaAgentServerAddContextSink, "MaaAgentServerAddContextSink"},
{&MaaAgentServerStartUp, "MaaAgentServerStartUp"},
{&MaaAgentServerShutDown, "MaaAgentServerShutDown"},
{&MaaAgentServerJoin, "MaaAgentServerJoin"},
{&MaaAgentServerDetach, "MaaAgentServerDetach"},
}

func initAgentServer(libDir string) error {
libName := getMaaAgentServerLibrary()
libPath := filepath.Join(libDir, libName)

handle, err := openLibrary(libPath)
if err != nil {
return &LibraryLoadError{
LibraryName: "MaaAgentServer",
LibraryName: maaAgentServerName,
LibraryPath: libPath,
Err: err,
}
Expand All @@ -58,18 +73,24 @@ func getMaaAgentServerLibrary() string {
}

func registerAgentServer() {
purego.RegisterLibFunc(&MaaAgentServerRegisterCustomRecognition, maaAgentServer, "MaaAgentServerRegisterCustomRecognition")
purego.RegisterLibFunc(&MaaAgentServerRegisterCustomAction, maaAgentServer, "MaaAgentServerRegisterCustomAction")
purego.RegisterLibFunc(&MaaAgentServerAddResourceSink, maaAgentServer, "MaaAgentServerAddResourceSink")
purego.RegisterLibFunc(&MaaAgentServerAddControllerSink, maaAgentServer, "MaaAgentServerAddControllerSink")
purego.RegisterLibFunc(&MaaAgentServerAddTaskerSink, maaAgentServer, "MaaAgentServerAddTaskerSink")
purego.RegisterLibFunc(&MaaAgentServerAddContextSink, maaAgentServer, "MaaAgentServerAddContextSink")
purego.RegisterLibFunc(&MaaAgentServerStartUp, maaAgentServer, "MaaAgentServerStartUp")
purego.RegisterLibFunc(&MaaAgentServerShutDown, maaAgentServer, "MaaAgentServerShutDown")
purego.RegisterLibFunc(&MaaAgentServerJoin, maaAgentServer, "MaaAgentServerJoin")
purego.RegisterLibFunc(&MaaAgentServerDetach, maaAgentServer, "MaaAgentServerDetach")
for _, entry := range agentServerEntries {
purego.RegisterLibFunc(entry.ptrToFunc, maaAgentServer, entry.name)
}
}

func releaseAgentServer() error {
err := unloadLibrary(maaAgentServer)
if err != nil {
return err
}

unregisterAgentServer()

return nil
}

func unregisterAgentServer() error {
return unloadLibrary(maaAgentServer)
func unregisterAgentServer() {
for _, entry := range agentServerEntries {
clearFuncVar(entry.ptrToFunc)
}
}
Loading
Loading