Commit 17077009 authored by ibuler's avatar ibuler

[Update] 修改一些

parent 30550fd4
...@@ -2,14 +2,16 @@ package proxy ...@@ -2,14 +2,16 @@ package proxy
import ( import (
"bytes" "bytes"
"cocogo/pkg/logger"
"fmt" "fmt"
"sync" "sync"
"cocogo/pkg/logger"
) )
type ParseRule func([]byte) bool type ParseRule func([]byte) bool
var ( var (
// Todo: Vim过滤依然存在问题
vimEnterMark = []byte("\x1b[?25l\x1b[37;1H\x1b[1m") vimEnterMark = []byte("\x1b[?25l\x1b[37;1H\x1b[1m")
vimExitMark = []byte("\x1b[37;1H\x1b[K\x1b") vimExitMark = []byte("\x1b[37;1H\x1b[K\x1b")
...@@ -41,6 +43,8 @@ type Parser struct { ...@@ -41,6 +43,8 @@ type Parser struct {
once sync.Once once sync.Once
} }
// Todo: parseMultipleInput 依然存在问题
// parseInputState 切换用户输入状态 // parseInputState 切换用户输入状态
func (p *Parser) parseInputState(b []byte) { func (p *Parser) parseInputState(b []byte) {
if p.inVimState || p.zmodemState != "" { if p.inVimState || p.zmodemState != "" {
......
package handler package handler
import ( import (
"cocogo/pkg/proxy"
//"cocogo/pkg/proxybak"
//"cocogo/pkg/proxybak"
"context" "context"
//"context"
//"strconv"
"fmt" "fmt"
//"encoding/json"
//"fmt"
"io" "io"
"strconv" "strconv"
"strings" "strings"
//"strings"
//"strconv"
"sync" "sync"
//"time"
"github.com/ibuler/ssh" "github.com/ibuler/ssh"
//"github.com/olekukonko/tablewriter" //"github.com/olekukonko/tablewriter"
...@@ -29,9 +19,9 @@ import ( ...@@ -29,9 +19,9 @@ import (
"cocogo/pkg/cctx" "cocogo/pkg/cctx"
"cocogo/pkg/logger" "cocogo/pkg/logger"
"cocogo/pkg/model" "cocogo/pkg/model"
"cocogo/pkg/proxy"
"cocogo/pkg/sdk" "cocogo/pkg/sdk"
"cocogo/pkg/service" "cocogo/pkg/service"
//"cocogo/pkg/proxy"
//"cocogo/pkg/transport" //"cocogo/pkg/transport"
//"cocogo/pkg/userhome" //"cocogo/pkg/userhome"
) )
...@@ -81,33 +71,33 @@ func (i *InteractiveHandler) preDispatch() { ...@@ -81,33 +71,33 @@ func (i *InteractiveHandler) preDispatch() {
}) })
} }
func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window) { func (i *InteractiveHandler) watchWinSizeChange(winCh <-chan ssh.Window, done <-chan struct{}) {
ctx, cancelFunc := context.WithCancel(i.sess.Context())
defer cancelFunc()
for { for {
select { select {
case <-ctx.Done(): case <-done:
logger.Info("Ctx done") logger.Debug("Interactive handler watch win size done")
return return
case win, ok := <-winCh: case win, ok := <-winCh:
if !ok { if !ok {
return return
} }
logger.Info("Term change:", win) logger.Debugf("Term change: %d*%d", win.Height, win.Width)
_ = i.term.SetSize(win.Width, win.Height) _ = i.term.SetSize(win.Width, win.Height)
} }
} }
} }
func (i *InteractiveHandler) Dispatch(ctx context.Context) { func (i *InteractiveHandler) Dispatch(ctx cctx.Context) {
i.preDispatch() i.preDispatch()
_, winCh, _ := i.sess.Pty() _, winCh, _ := i.sess.Pty()
for { for {
go i.watchWinSizeChange(winCh) doneChan := make(chan struct{})
go i.watchWinSizeChange(winCh, doneChan)
line, err := i.term.ReadLine() line, err := i.term.ReadLine()
close(doneChan)
if err != nil { if err != nil {
logger.Error("ReadLine done", err) logger.Error("Read line from user err:", err)
break break
} }
...@@ -330,7 +320,11 @@ func (i *InteractiveHandler) searchNodeAssets(num int) (assets []sdk.Asset) { ...@@ -330,7 +320,11 @@ func (i *InteractiveHandler) searchNodeAssets(num int) (assets []sdk.Asset) {
} }
func (i *InteractiveHandler) Proxy(ctx context.Context) { func (i *InteractiveHandler) Proxy(ctx context.Context) {
p := proxy.ProxyServer{Session: i.sess, Asset: i.assetSelect, SystemUser: i.systemUserSelect} p := proxy.ProxyServer{
Session: i.sess,
Asset: i.assetSelect,
SystemUser: i.systemUserSelect,
}
p.Proxy(ctx) p.Proxy(ctx)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment