feat: EH Downloader 用 Go + Wails v2 重写
原 Electron 版在这台 Windows 机器上无法启动(0x80000003 崩在 V8 初始化), 整个业务逻辑用 Go 重写,前端界面与协议结论完全保留。 - internal/eh: 协议核心,画廊页分页 -> /s/ -> hath 直链 -> 下载 - internal/core: 并发引擎 / 状态存储 / 目录模板 / 油猴桥口 - app.go: Wails 绑定层,替代 Electron IPC - frontend/js/api.js: 适配层,renderer.js 一行未改 - 37 个测试,含 httptest 模拟 EH 的端到端链路验证 相比 Electron 版:90MB -> 12.4MB,180MB 内存 -> 27MB,构建 90s -> 2s。 顺带修掉原版代理探测的 bug(永远返回第一个端口,从不等连接结果)。
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package core
|
||||
|
||||
// 测试辅助:起一个真实监听端口,用来验证代理探测真的等了连接结果
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type testListener struct {
|
||||
ln net.Listener
|
||||
}
|
||||
|
||||
func (l *testListener) port() int {
|
||||
addr := l.ln.Addr().(*net.TCPAddr)
|
||||
return addr.Port
|
||||
}
|
||||
|
||||
func (l *testListener) Close() error { return l.ln.Close() }
|
||||
|
||||
func net_listen_loopback() (*testListener, error) {
|
||||
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 接受连接,避免 backlog 满
|
||||
go func() {
|
||||
for {
|
||||
c, err := ln.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c.Close()
|
||||
}
|
||||
}()
|
||||
return &testListener{ln: ln}, nil
|
||||
}
|
||||
|
||||
var _ = strconv.Itoa
|
||||
Reference in New Issue
Block a user