X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fagent%2Fxdsserver.go;h=1c715f6505331a49ad8e55a78c1abb0e535fe9a5;hb=a2cc38902ff7528870822110c4f04329a3918564;hp=3ec612380585fcf019cc609d4bf132f4a3242fb4;hpb=45f6472d1e8ecad428da314a6d762143f033865d;p=src%2Fxds%2Fxds-agent.git diff --git a/lib/agent/xdsserver.go b/lib/agent/xdsserver.go index 3ec6123..1c715f6 100644 --- a/lib/agent/xdsserver.go +++ b/lib/agent/xdsserver.go @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 "IoT.bzh" + * Copyright (C) 2017-2018 "IoT.bzh" * Author Sebastien Douheret * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -26,11 +26,11 @@ import ( "sync" "time" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xaapiv1" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xdsconfig" + common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-server.git/lib/xsapiv1" "github.com/gin-gonic/gin" - "github.com/iotbzh/xds-agent/lib/xaapiv1" - "github.com/iotbzh/xds-agent/lib/xdsconfig" - common "github.com/iotbzh/xds-common/golib" - "github.com/iotbzh/xds-server/lib/xsapiv1" uuid "github.com/satori/go.uuid" sio_client "github.com/sebd71/go-socket.io-client" ) @@ -54,16 +54,20 @@ type XdsServer struct { sockEventsLock *sync.Mutex // Private fields - client *common.HTTPClient - ioSock *sio_client.Client - logOut io.Writer - apiRouter *gin.RouterGroup - cmdList map[string]interface{} + client *common.HTTPClient + ioSock *sio_client.Client + logOut io.Writer + apiRouter *gin.RouterGroup + cmdList map[string]interface{} + cbOnConnect OnConnectedCB } // EventCB Event emitter callback type EventCB func(privData interface{}, evtData interface{}) error +// OnConnectedCB connect callback +type OnConnectedCB func(svr *XdsServer) error + // caller Used to chain event listeners type caller struct { id uuid.UUID @@ -135,6 +139,12 @@ func (xs *XdsServer) Connect() error { return err } +// ConnectOn Register a callback on events reception +func (xs *XdsServer) ConnectOn(f OnConnectedCB) error { + xs.cbOnConnect = f + return nil +} + // IsTempoID returns true when server as a temporary id func (xs *XdsServer) IsTempoID() bool { return strings.HasPrefix(xs.ID, _IDTempoPrefix) @@ -536,15 +546,10 @@ func (xs *XdsServer) _CreateConnectHTTP() error { // _Reconnect Re-established connection func (xs *XdsServer) _Reconnect() error { + + // Note that ConnectOn callback will be called (see apiv1.go file) err := xs._Connect(true) - if err == nil { - // Reload projects list for this server - err = xs.projects.Init(xs) - } - if err == nil { - // Register again to all events - err = xs.EventRegister(xsapiv1.EVTAll, "") - } + return err } @@ -575,6 +580,12 @@ func (xs *XdsServer) _Connect(reConn bool) error { } xs.Connected = true + + // Call OnConnect callback + if xs.cbOnConnect != nil { + xs.cbOnConnect(xs) + } + xs._NotifyState() return nil }