aboutsummaryrefslogtreecommitdiffstats
path: root/iosocket-client.go
diff options
context:
space:
mode:
Diffstat (limited to 'iosocket-client.go')
-rw-r--r--iosocket-client.go39
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
}