Reworked SDKs events (introduced sdk-state-change)
[src/xds/xds-agent.git] / lib / xaapiv1 / events.go
index ab08d0f..6520057 100644 (file)
@@ -40,13 +40,15 @@ const (
        EventTypePrefix = "event:" // following by event type
 
        // Supported Events type
-       EVTAll           = EventTypePrefix + "all"
-       EVTServerConfig  = EventTypePrefix + "server-config"        // type EventMsg with Data type xaapiv1.ServerCfg
-       EVTProjectAdd    = EventTypePrefix + "project-add"          // type EventMsg with Data type xaapiv1.ProjectConfig
-       EVTProjectDelete = EventTypePrefix + "project-delete"       // type EventMsg with Data type xaapiv1.ProjectConfig
-       EVTProjectChange = EventTypePrefix + "project-state-change" // type EventMsg with Data type xaapiv1.ProjectConfig
-       EVTSDKInstall    = EventTypePrefix + "sdk-install"          // type EventMsg with Data type xaapiv1.SDKManagementMsg
-       EVTSDKRemove     = EventTypePrefix + "sdk-remove"           // type EventMsg with Data type xaapiv1.SDKManagementMsg
+       EVTAll            = EventTypePrefix + "all"
+       EVTServerConfig   = EventTypePrefix + "server-config"        // type EventMsg with Data type xaapiv1.ServerCfg
+       EVTProjectAdd     = EventTypePrefix + "project-add"          // type EventMsg with Data type xaapiv1.ProjectConfig
+       EVTProjectDelete  = EventTypePrefix + "project-delete"       // type EventMsg with Data type xaapiv1.ProjectConfig
+       EVTProjectChange  = EventTypePrefix + "project-state-change" // type EventMsg with Data type xaapiv1.ProjectConfig
+       EVTSDKAdd         = EventTypePrefix + "sdk-add"              // type EventMsg with Data type xaapiv1.SDK
+       EVTSDKRemove      = EventTypePrefix + "sdk-remove"           // type EventMsg with Data type xaapiv1.SDK
+       EVTSDKManagement  = EventTypePrefix + "sdk-management"       // type EventMsg with Data type xaapiv1.SDKManagementMsg
+       EVTSDKStateChange = EventTypePrefix + "sdk-state-change"     // type EventMsg with Data type xaapiv1.SDK
 )
 
 // EVTAllList List of all supported events
@@ -55,8 +57,10 @@ var EVTAllList = []string{
        EVTProjectAdd,
        EVTProjectDelete,
        EVTProjectChange,
-       EVTSDKInstall,
+       EVTSDKAdd,
        EVTSDKRemove,
+       EVTSDKManagement,
+       EVTSDKStateChange,
 }
 
 // EventMsg Event message send over Websocket, data format depend to Type (see DecodeXXX function)
@@ -97,12 +101,27 @@ func (e *EventMsg) DecodeProjectConfig() (ProjectConfig, error) {
        return p, err
 }
 
-// DecodeSDKMsg Helper to decode Data field type SDKManagementMsg
-func (e *EventMsg) DecodeSDKMsg() (SDKManagementMsg, error) {
+// DecodeSDKMgtMsg Helper to decode Data field type SDKManagementMsg
+func (e *EventMsg) DecodeSDKMgtMsg() (SDKManagementMsg, error) {
        var err error
        s := SDKManagementMsg{}
+       if e.Type != EVTSDKManagement {
+               return s, fmt.Errorf("Invalid type")
+       }
+       d := []byte{}
+       d, err = json.Marshal(e.Data)
+       if err == nil {
+               err = json.Unmarshal(d, &s)
+       }
+       return s, err
+}
+
+// DecodeSDKEvent Helper to decode Data field type SDK
+func (e *EventMsg) DecodeSDKEvent() (SDK, error) {
+       var err error
+       s := SDK{}
        switch e.Type {
-       case EVTSDKInstall, EVTSDKRemove:
+       case EVTSDKAdd, EVTSDKRemove, EVTSDKStateChange:
                d := []byte{}
                d, err = json.Marshal(e.Data)
                if err == nil {