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" {
|
||||
fmt.Println("resize")
|
||||
value, ok := opData.Data.(ResizeDataType)
|
||||
if ok {
|
||||
err = proc.SetSize(value.Cols, value.Rows)
|
||||
if err != nil {
|
||||
logrus.Errorf("重置大小错误 %d bytes", n)
|
||||
} else {
|
||||
fmt.Println("重置大小成功")
|
||||
// Data 反序列化后是 map[string]interface{}, 不能直接断言 ResizeDataType
|
||||
// (此前断言恒失败, 前端 resize 被静默吞掉, PTY 固定 180x30)
|
||||
raw, merr := json.Marshal(opData.Data)
|
||||
var size ResizeDataType
|
||||
if merr == nil && json.Unmarshal(raw, &size) == nil && size.Cols > 0 && size.Rows > 0 {
|
||||
if serr := proc.SetSize(size.Cols, size.Rows); serr != nil {
|
||||
logrus.Errorf("重置大小错误: %s", serr.Error())
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user