@@ -13,6 +13,7 @@ import (
1313 "github.com/drycc/controller-sdk-go/api"
1414 "github.com/drycc/controller-sdk-go/ps"
1515 "golang.org/x/net/websocket"
16+ yaml "gopkg.in/yaml.v3"
1617)
1718
1819const (
@@ -147,29 +148,37 @@ func printProcesses(d *DryccCmd, appID string, input []api.Pods) {
147148}
148149
149150func printExec (d * DryccCmd , conn * websocket.Conn ) error {
150- var message string
151- err := websocket .Message .Receive (conn , & message )
151+ var data string
152+ err := websocket .Message .Receive (conn , & data )
152153 if err != nil {
153154 if err != io .EOF {
154155 log .Printf ("error: %v" , err )
155156 }
156157 return nil
157158 }
158- d .Printf ("%s" , message )
159- return nil
159+ message , err := parseChannelMessage (data )
160+ if err == nil {
161+ d .Printf ("%s" , message )
162+ }
163+ return err
160164}
161165
162166func runRecvTask (conn * websocket.Conn , c console.Console , recvChan , sendChan chan string ) (context.Context , context.CancelFunc ) {
163167 ctx , cancel := context .WithCancel (context .Background ())
164168 go func () {
165169 for {
166- var message string
167- err := websocket .Message .Receive (conn , & message )
170+ var data string
171+ err := websocket .Message .Receive (conn , & data )
168172 if err != nil {
169173 cancel ()
170174 break
171175 }
172- recvChan <- message
176+ if message , err := parseChannelMessage (data ); err != nil {
177+ cancel ()
178+ break
179+ } else {
180+ recvChan <- message
181+ }
173182 }
174183 }()
175184 go func () {
@@ -254,3 +263,21 @@ func parsePsTargets(targets []string) (map[string]int, error) {
254263
255264 return targetMap , nil
256265}
266+
267+ func parseChannelMessage (data string ) (string , error ) {
268+ channel , message := data [0 ], data [1 :]
269+ if string (channel ) == errorChannel {
270+ data := make (map [string ]interface {})
271+ yaml .Unmarshal ([]byte (message ), data )
272+ if value , hasKey := data ["message" ]; hasKey {
273+ if message , ok := value .(string ); ok {
274+ return message , nil
275+ } else {
276+ return "" , fmt .Errorf ("message is not string, type: %T" , message )
277+ }
278+ } else {
279+ return "" , nil
280+ }
281+ }
282+ return message , nil
283+ }
0 commit comments