/* * Copyright (C) 2017-2018 "IoT.bzh" * Author Sebastien Douheret * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package xsapiv1 import ( "encoding/json" "fmt" ) // EventRegisterArgs Parameters (json format) of /events/register command type EventRegisterArgs struct { Name string `json:"name"` Filter string `json:"filter"` } // EventUnRegisterArgs Parameters of /events/unregister command type EventUnRegisterArgs struct { Name string `json:"name"` ID int `json:"id"` } // EventMsg Message send type EventMsg struct { 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) const ( // EventTypePrefix Used as event prefix EventTypePrefix = "event:" // following by event type // Supported Events type 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 }