update
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 38s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m12s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 54s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m32s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 48s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 2m2s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 1m7s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 1m56s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 1m22s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 57s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 1m46s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 1m26s
All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 38s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 1m12s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 54s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m32s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 48s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 2m2s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 1m7s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 1m56s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 1m22s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 57s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 1m46s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 1m26s
This commit is contained in:
@@ -1241,7 +1241,7 @@ func (s *Server) RestartClientPlugin(clientID, pluginName, ruleName string) erro
|
|||||||
return fmt.Errorf("client %s not found or not online", clientID)
|
return fmt.Errorf("client %s not found or not online", clientID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找规则
|
// 查找规则(用于内置插件)
|
||||||
var rule *protocol.ProxyRule
|
var rule *protocol.ProxyRule
|
||||||
for _, r := range cs.Rules {
|
for _, r := range cs.Rules {
|
||||||
if r.Name == ruleName && r.Type == pluginName {
|
if r.Name == ruleName && r.Type == pluginName {
|
||||||
@@ -1249,17 +1249,63 @@ func (s *Server) RestartClientPlugin(clientID, pluginName, ruleName string) erro
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if rule == nil {
|
|
||||||
return fmt.Errorf("rule %s not found for plugin %s", ruleName, pluginName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 先停止
|
// 先停止
|
||||||
if err := s.sendClientPluginStop(cs.Session, pluginName, ruleName); err != nil {
|
if err := s.sendClientPluginStop(cs.Session, pluginName, ruleName); err != nil {
|
||||||
log.Printf("[Server] Stop plugin warning: %v", err)
|
log.Printf("[Server] Stop plugin warning: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 再启动
|
// 如果找到规则,使用规则重启(内置插件)
|
||||||
|
if rule != nil {
|
||||||
return s.sendClientPluginStart(cs.Session, *rule)
|
return s.sendClientPluginStart(cs.Session, *rule)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 否则发送 JS 插件重启命令
|
||||||
|
return s.sendJSPluginRestart(cs.Session, pluginName, ruleName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// sendJSPluginRestart 发送 JS 插件重启命令
|
||||||
|
func (s *Server) sendJSPluginRestart(session *yamux.Session, pluginName, ruleName string) error {
|
||||||
|
stream, err := session.Open()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer stream.Close()
|
||||||
|
|
||||||
|
// 使用 PluginConfigUpdate 消息触发重启
|
||||||
|
req := protocol.PluginConfigUpdateRequest{
|
||||||
|
PluginName: pluginName,
|
||||||
|
RuleName: ruleName,
|
||||||
|
Config: nil,
|
||||||
|
Restart: true,
|
||||||
|
}
|
||||||
|
msg, err := protocol.NewMessage(protocol.MsgTypePluginConfigUpdate, req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := protocol.WriteMessage(stream, msg); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 等待响应
|
||||||
|
resp, err := protocol.ReadMessage(stream)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var result struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
if err := resp.ParsePayload(&result); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if !result.Success {
|
||||||
|
return fmt.Errorf("restart failed: %s", result.Error)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[Server] JS plugin %s restarted on client", pluginName)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateClientPluginConfig 更新客户端插件配置
|
// UpdateClientPluginConfig 更新客户端插件配置
|
||||||
|
|||||||
Reference in New Issue
Block a user