diff options
Diffstat (limited to 'iosocket-client.go')
-rw-r--r-- | iosocket-client.go | 39 |
1 files changed, 33 insertions, 6 deletions
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 } |