Skip to content

Commit

Permalink
perf: 优化SDK调用检测逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
rehiy committed Aug 26, 2024
1 parent a0a5dc2 commit f57f7d2
Showing 1 changed file with 30 additions and 32 deletions.
62 changes: 30 additions & 32 deletions wcferry/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package wcferry

import (
"errors"
"runtime"
"syscall"
"time"

Expand Down Expand Up @@ -78,20 +79,46 @@ func (c *Client) DisableReceiver(ks ...string) error {
return err
}

// 启动 wcf 服务
// return error 错误信息
func (c *Client) wxInitSDK() error {
err := c.sdkCall("WxInitSDK", uintptr(0), uintptr(c.ListenPort))
time.Sleep(5 * time.Second)
return err
}

// 关闭 wcf 服务
// return error 错误信息
func (c *Client) wxDestroySDK() error {
return c.sdkCall("WxDestroySDK")
}

// 调用 sdk.dll 中的函数
// return error 错误信息
func (c *Client) sdkCall(fn string, a ...uintptr) error {
dll := c.SdkLibrary
if dll == "" || runtime.GOOS != "windows" {
logman.Warn("skip to load sdk.dll")
return nil
}
// 查找 sdk.dll
if !filer.Exists(dll) {
dll = "wcferry/" + dll
if !filer.Exists(dll) {
return errors.New(dll + " not found")
}
}
// 加载 sdk.dll
sdk, err := syscall.LoadDLL(c.SdkLibrary)
sdk, err := syscall.LoadDLL(dll)
if err != nil {
logman.Info("failed to load sdk.dll", "error", err)
logman.Warn("failed to load sdk.dll", "error", err)
return err
}
defer sdk.Release()
// 查找 fn 函数
proc, err := sdk.FindProc(fn)
if err != nil {
logman.Info("failed to call "+fn, "error", err)
logman.Warn("failed to call "+fn, "error", err)
return err
}
// 执行 fn(a...)
Expand All @@ -102,32 +129,3 @@ func (c *Client) sdkCall(fn string, a ...uintptr) error {
}
return err
}

// 启动 wcf 服务
// return error 错误信息
func (c *Client) wxInitSDK() error {
if c.SdkLibrary == "" {
return nil
}
// 尝试在子目录查找
if !filer.Exists(c.SdkLibrary) {
if !filer.Exists("wcferry/" + c.SdkLibrary) {
return errors.New(c.SdkLibrary + " not found")
}
c.SdkLibrary = "wcferry/" + c.SdkLibrary
}
// 打开 wcf 服务程序
err := c.sdkCall("WxInitSDK", uintptr(0), uintptr(c.ListenPort))
time.Sleep(5 * time.Second)
return err
}

// 关闭 wcf 服务
// return error 错误信息
func (c *Client) wxDestroySDK() error {
if c.SdkLibrary == "" {
return nil
}
// 关闭 wcf 服务
return c.sdkCall("WxDestroySDK")
}

0 comments on commit f57f7d2

Please sign in to comment.