fix(shell): Web 终端 resize 失效修复——前端 resize 消息 Data 字段反序列化为 map[string]interface{}, 对 ResizeDataType 的直接类型断言恒失败被静默吞掉, PTY 固定 180x30 与窗口脱节; 改为二次 marshal+unmarshal 解码行列并校验正值后 SetSize
This commit is contained in:
+7
-10
@@ -176,17 +176,14 @@ func getWebShell(recDir string) gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else if opData.Op == "resize" {
|
} else if opData.Op == "resize" {
|
||||||
fmt.Println("resize")
|
// Data 反序列化后是 map[string]interface{}, 不能直接断言 ResizeDataType
|
||||||
value, ok := opData.Data.(ResizeDataType)
|
// (此前断言恒失败, 前端 resize 被静默吞掉, PTY 固定 180x30)
|
||||||
if ok {
|
raw, merr := json.Marshal(opData.Data)
|
||||||
err = proc.SetSize(value.Cols, value.Rows)
|
var size ResizeDataType
|
||||||
if err != nil {
|
if merr == nil && json.Unmarshal(raw, &size) == nil && size.Cols > 0 && size.Rows > 0 {
|
||||||
logrus.Errorf("重置大小错误 %d bytes", n)
|
if serr := proc.SetSize(size.Cols, size.Rows); serr != nil {
|
||||||
} else {
|
logrus.Errorf("重置大小错误: %s", serr.Error())
|
||||||
fmt.Println("重置大小成功")
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user