X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=iosocket-client.go;fp=iosocket-client.go;h=cd4b8ba6c0c6e4bd05fe498e813f1e4b74c5bc71;hb=05ecb2f2c82e6da6f0d93644589b8aae660e3ebf;hp=9115b103dac81b63ad36fbdea8fc407984153fb8;hpb=92f718ade3789c1ed33be04d03c3214b6ed8f596;p=src%2Fxds%2Fxds-cli.git diff --git a/iosocket-client.go b/iosocket-client.go index 9115b10..cd4b8ba 100644 --- a/iosocket-client.go +++ b/iosocket-client.go @@ -22,17 +22,27 @@ import ( "fmt" "sync" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1" + socketio_client "github.com/sebd71/go-socket.io-client" ) +// Disconnection Channel used to notify XDS Server disconnection +type Disconnection struct { + error string + code int + svrConf xaapiv1.ServerCfg +} + // IOSockClient . type IOSockClient struct { - URL string - Conn *socketio_client.Client - Options *socketio_client.Options - EmitMutex *sync.Mutex - Connected bool - EscapeKeys []byte + URL string + Conn *socketio_client.Client + Options *socketio_client.Options + EmitMutex *sync.Mutex + Connected bool + ServerDiscoChan chan Disconnection + EscapeKeys []byte } // NewIoSocketClient Create a new IOSockClient @@ -47,6 +57,7 @@ func NewIoSocketClient(url, clientID string) (*IOSockClient, error) { Transport: "websocket", Header: make(map[string][]string), }, + ServerDiscoChan: make(chan Disconnection, 1), } sCli.Options.Header["XDS-AGENT-SID"] = []string{clientID} @@ -64,6 +75,22 @@ func NewIoSocketClient(url, clientID string) (*IOSockClient, error) { sCli.Connected = false }) + args := xaapiv1.EventRegisterArgs{Name: xaapiv1.EVTServerConfig} + if err := HTTPCli.Post("/events/register", args, nil); err != nil { + return sCli, err + } + + sCli.Conn.On(xaapiv1.EVTServerConfig, func(ev xaapiv1.EventMsg) { + svrCfg, err := ev.DecodeServerCfg() + if err == nil && !svrCfg.Connected { + sCli.ServerDiscoChan <- Disconnection{ + error: "\nXDS Server (id " + svrCfg.ID + ") disconnected !", + code: 1, + svrConf: svrCfg, + } + } + }) + return sCli, nil }