feat: add support for starting plugin rules with remote port configuration
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 28s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m7s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 50s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 2m33s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 1m2s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 2m26s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 58s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 2m32s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 2m9s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 1m30s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 3m6s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 2m30s
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 28s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m7s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 50s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 2m33s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 1m2s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 2m26s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 58s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 2m32s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 2m9s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 1m30s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 3m6s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 2m30s
This commit is contained in:
@@ -1227,6 +1227,15 @@ func (s *Server) pushClientInstalledPlugins(cs *ClientSession, alreadyPushed map
|
||||
|
||||
if err := s.InstallJSPluginToClient(cs.ID, req); err != nil {
|
||||
log.Printf("[Server] Failed to restore plugin %s: %v", cp.Name, err)
|
||||
} else if cp.RemotePort > 0 {
|
||||
// 安装成功后启动服务端监听器
|
||||
pluginRule := protocol.ProxyRule{
|
||||
Name: cp.Name,
|
||||
Type: cp.Name,
|
||||
RemotePort: cp.RemotePort,
|
||||
Enabled: boolPtr(true),
|
||||
}
|
||||
s.startClientPluginListener(cs, pluginRule)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1342,6 +1351,30 @@ func (s *Server) sendClientPluginStop(session *yamux.Session, pluginName, ruleNa
|
||||
return nil
|
||||
}
|
||||
|
||||
// StartPluginRule 为客户端插件启动服务端监听器
|
||||
func (s *Server) StartPluginRule(clientID string, rule protocol.ProxyRule) error {
|
||||
s.mu.RLock()
|
||||
cs, ok := s.clients[clientID]
|
||||
s.mu.RUnlock()
|
||||
|
||||
if !ok {
|
||||
return fmt.Errorf("client %s not found or not online", clientID)
|
||||
}
|
||||
|
||||
// 检查端口是否已被占用
|
||||
cs.mu.Lock()
|
||||
_, exists := cs.Listeners[rule.RemotePort]
|
||||
cs.mu.Unlock()
|
||||
if exists {
|
||||
// 端口已在监听,无需重复启动
|
||||
return nil
|
||||
}
|
||||
|
||||
// 启动插件监听器
|
||||
s.startClientPluginListener(cs, rule)
|
||||
return nil
|
||||
}
|
||||
|
||||
// RestartClientPlugin 重启客户端 JS 插件
|
||||
func (s *Server) RestartClientPlugin(clientID, pluginName, ruleName string) error {
|
||||
s.mu.RLock()
|
||||
@@ -1612,3 +1645,8 @@ func (s *Server) StopClientLogStream(sessionID string) {
|
||||
|
||||
s.logSessions.RemoveSession(sessionID)
|
||||
}
|
||||
|
||||
// boolPtr 返回 bool 值的指针
|
||||
func boolPtr(b bool) *bool {
|
||||
return &b
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user