X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fxsapiv1%2Fevents.go;h=e42563c01cd2b9bfa0a1678af2f66ab9bbdb2e30;hb=24581d461e7c9b87836384cd4c38cb2bd7147459;hp=e19eb82068f0b20e9b1d4d0722616329c5dd7c61;hpb=9fb41a3693eeaac9adea71112232abaafea54c8f;p=src%2Fxds%2Fxds-server.git diff --git a/lib/xsapiv1/events.go b/lib/xsapiv1/events.go index e19eb82..e42563c 100644 --- a/lib/xsapiv1/events.go +++ b/lib/xsapiv1/events.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"); @@ -17,10 +17,15 @@ package xsapiv1 +import ( + "encoding/json" + "fmt" +) + // EventRegisterArgs Parameters (json format) of /events/register command type EventRegisterArgs struct { - Name string `json:"name"` - ProjectID string `json:"filterProjectID"` + Name string `json:"name"` + Filter string `json:"filter"` } // EventUnRegisterArgs Parameters of /events/unregister command @@ -31,9 +36,10 @@ type EventUnRegisterArgs struct { // EventMsg Message send type EventMsg struct { - Time string `json:"time"` - Type string `json:"type"` - Folder FolderConfig `json:"folder"` + Time string `json:"time"` + FromSessionID string `json:"sessionID"` // Session ID of client who produce this event + Type string `json:"type"` + Data interface{} `json:"data"` // Data } // EventEvent Event send in WS when an internal event (eg. Syncthing event is received) @@ -42,7 +48,105 @@ const ( EventTypePrefix = "event:" // following by event type // Supported Events type - EVTAll = EventTypePrefix + "all" - EVTFolderChange = EventTypePrefix + "folder-change" // type EventMsg with Data type xsapiv1.??? - EVTFolderStateChange = EventTypePrefix + "folder-state-change" // type EventMsg with Data type xsapiv1.??? + EVTAll = EventTypePrefix + "all" + + EVTFolderChange = EventTypePrefix + "folder-change" // type EventMsg with Data type xsapiv1.FolderConfig + EVTFolderStateChange = EventTypePrefix + "folder-state-change" // type EventMsg with Data type xsapiv1.FolderConfig + + EVTSDKAdd = EventTypePrefix + "sdk-add" // type EventMsg with Data type xsapiv1.SDK + EVTSDKRemove = EventTypePrefix + "sdk-remove" // type EventMsg with Data type xsapiv1.SDK + EVTSDKManagement = EventTypePrefix + "sdk-management" // type EventMsg with Data type xsapiv1.SDKManagementMsg + EVTSDKStateChange = EventTypePrefix + "sdk-state-change" // type EventMsg with Data type xsapiv1.SDK + + EVTTargetAdd = EventTypePrefix + "target-add" // type EventMsg with Data type xsapiv1.TargetConfig + EVTTargetRemove = EventTypePrefix + "target-remove" // type EventMsg with Data type xsapiv1.TargetConfig + EVTTargetStateChange = EventTypePrefix + "target-state-change" // type EventMsg with Data type xsapiv1.TargetConfig + + EVTTargetTerminalAdd = EventTypePrefix + "target-terminal-add" // type EventMsg with Data type xsapiv1.TerminalConfig + EVTTargetTerminalRemove = EventTypePrefix + "target-terminal-remove" // type EventMsg with Data type xsapiv1.TerminalConfig + EVTTargetTerminalStateChange = EventTypePrefix + "target-terminal-state-change" // type EventMsg with Data type xsapiv1.TerminalConfig ) + +// EVTAllList List of all supported events +var EVTAllList = []string{ + EVTFolderChange, + EVTFolderStateChange, + EVTSDKAdd, + EVTSDKRemove, + EVTSDKManagement, + EVTSDKStateChange, + EVTTargetAdd, + EVTTargetRemove, + EVTTargetStateChange, + EVTTargetTerminalAdd, + EVTTargetTerminalRemove, + EVTTargetTerminalStateChange, +} + +// DecodeFolderConfig Helper to decode Data field type FolderConfig +func (e *EventMsg) DecodeFolderConfig() (FolderConfig, error) { + var err error + f := FolderConfig{} + switch e.Type { + case EVTFolderChange, EVTFolderStateChange: + d := []byte{} + d, err = json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &f) + } + default: + err = fmt.Errorf("Invalid type") + } + return f, err +} + +// DecodeSDKEvent Helper to decode Data field type SDK +func (e *EventMsg) DecodeSDKEvent() (SDK, error) { + var err error + s := SDK{} + switch e.Type { + case EVTSDKAdd, EVTSDKRemove, EVTSDKStateChange: + d := []byte{} + d, err = json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &s) + } + default: + err = fmt.Errorf("Invalid type") + } + return s, err +} + +// DecodeTargetEvent Helper to decode Data field type TargetConfig +func (e *EventMsg) DecodeTargetEvent() (TargetConfig, error) { + var err error + p := TargetConfig{} + switch e.Type { + case EVTTargetAdd, EVTTargetRemove, EVTTargetStateChange: + d := []byte{} + d, err = json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &p) + } + default: + err = fmt.Errorf("Invalid type") + } + return p, err +} + +// DecodeTerminalEvent Helper to decode Data field type TerminalConfig +func (e *EventMsg) DecodeTerminalEvent() (TerminalConfig, error) { + var err error + p := TerminalConfig{} + switch e.Type { + case EVTTargetTerminalAdd, EVTTargetTerminalRemove, EVTTargetTerminalStateChange: + d := []byte{} + d, err = json.Marshal(e.Data) + if err == nil { + err = json.Unmarshal(d, &p) + } + default: + err = fmt.Errorf("Invalid type") + } + return p, err +}