Skip to content

Commit 0a68fe2

Browse files
committed
chore(workflow-cli): remove ps:exec exit
1 parent aa8d1e0 commit 0a68fe2

1 file changed

Lines changed: 25 additions & 14 deletions

File tree

cmd/ps.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmd
22

33
import (
4+
"context"
45
"encoding/base64"
56
"fmt"
67
"io"
@@ -166,15 +167,29 @@ func streamExec(conn *websocket.Conn) error {
166167

167168
t := term.NewTerminal(os.Stdin, "")
168169

170+
ctx, cancel := context.WithCancel(context.Background())
171+
172+
stdin := make(chan string)
173+
defer close(stdin)
169174
go func() {
170175
for {
171-
messageType, message, err := conn.ReadMessage()
176+
line, err := t.ReadLine()
172177
if err != nil {
178+
cancel()
179+
break
180+
}
181+
stdin <- line
182+
}
183+
}()
184+
185+
go func() {
186+
for {
187+
messageType, message, err := conn.ReadMessage()
188+
if err != nil || messageType == websocket.CloseMessage {
173189
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseNormalClosure) {
174190
log.Printf("error: %v", err)
175191
}
176-
break
177-
} else if messageType == websocket.CloseMessage {
192+
cancel()
178193
break
179194
} else {
180195
t.Write(message)
@@ -183,19 +198,15 @@ func streamExec(conn *websocket.Conn) error {
183198
}()
184199

185200
for {
186-
line, err := t.ReadLine()
187-
if err != nil {
188-
return err
189-
}
190-
if line == "exit" {
191-
conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
192-
break
193-
}
194-
if err := conn.WriteMessage(websocket.TextMessage, []byte(line+"\n")); err != nil {
195-
break
201+
select {
202+
case <-ctx.Done():
203+
return nil
204+
case line := <-stdin:
205+
if err := conn.WriteMessage(websocket.TextMessage, []byte(line+"\n")); err != nil {
206+
return nil
207+
}
196208
}
197209
}
198-
return nil
199210
}
200211

201212
func parseType(target string, appID string) (string, string) {

0 commit comments

Comments
 (0)