- 修复查询分享的资源参数无效的问题

- 修复ssh连接并发写入websocket的问题
This commit is contained in:
dushixiang
2022-05-05 09:07:11 +08:00
parent 03b59d6a2f
commit b73bef0c08
7 changed files with 59 additions and 35 deletions

View File

@ -2,6 +2,7 @@ package api
import (
"context"
"sync"
"time"
"unicode/utf8"
@ -15,12 +16,13 @@ import (
type TermHandler struct {
sessionId string
isRecording bool
ws *websocket.Conn
webSocket *websocket.Conn
nextTerminal *term.NextTerminal
ctx context.Context
cancel context.CancelFunc
dataChan chan rune
tick *time.Ticker
mutex sync.Mutex
}
func NewTermHandler(sessionId string, isRecording bool, ws *websocket.Conn, nextTerminal *term.NextTerminal) *TermHandler {
@ -29,7 +31,7 @@ func NewTermHandler(sessionId string, isRecording bool, ws *websocket.Conn, next
return &TermHandler{
sessionId: sessionId,
isRecording: isRecording,
ws: ws,
webSocket: ws,
nextTerminal: nextTerminal,
ctx: ctx,
cancel: cancel,
@ -38,17 +40,17 @@ func NewTermHandler(sessionId string, isRecording bool, ws *websocket.Conn, next
}
}
func (r TermHandler) Start() {
func (r *TermHandler) Start() {
go r.readFormTunnel()
go r.writeToWebsocket()
}
func (r TermHandler) Stop() {
func (r *TermHandler) Stop() {
r.tick.Stop()
r.cancel()
}
func (r TermHandler) readFormTunnel() {
func (r *TermHandler) readFormTunnel() {
for {
select {
case <-r.ctx.Done():
@ -65,7 +67,7 @@ func (r TermHandler) readFormTunnel() {
}
}
func (r TermHandler) writeToWebsocket() {
func (r *TermHandler) writeToWebsocket() {
var buf []byte
for {
select {
@ -74,7 +76,7 @@ func (r TermHandler) writeToWebsocket() {
case <-r.tick.C:
if len(buf) > 0 {
s := string(buf)
if err := WriteMessage(r.ws, dto.NewMessage(Data, s)); err != nil {
if err := r.WriteMessage(dto.NewMessage(Data, s)); err != nil {
return
}
// 录屏
@ -86,7 +88,7 @@ func (r TermHandler) writeToWebsocket() {
if nextSession != nil && len(nextSession.Observer.All()) > 0 {
obs := nextSession.Observer.All()
for _, ob := range obs {
_ = WriteMessage(ob.WebSocket, dto.NewMessage(Data, s))
_ = ob.WriteMessage(dto.NewMessage(Data, s))
}
}
buf = []byte{}
@ -102,3 +104,13 @@ func (r TermHandler) writeToWebsocket() {
}
}
}
func (r *TermHandler) WriteMessage(msg dto.Message) error {
if r.webSocket == nil {
return nil
}
defer r.mutex.Unlock()
r.mutex.Lock()
message := []byte(msg.ToString())
return r.webSocket.WriteMessage(websocket.TextMessage, message)
}