-// (c) Bernhard Tittelbach, 2013
-
-package r3events
-
-import (
- "encoding/json"
- "fmt"
- "errors"
- "strings"
- )
-
-func NameOfStruct(evi interface{}) (name string) {
- etype := fmt.Sprintf("%T", evi)
- etype_lastsep := strings.LastIndex(etype,".")
- return etype[etype_lastsep+1:] //works in all cases for etype_lastsep in range -1 to len(etype)-1
-}
-
-func MarshalEvent2ByteByte(event_interface interface{}) (data [][]byte, err error) {
- var msg []byte
- //~ fmt.Printf("%T%+v\n", event_interface, event_interface)
- msg, err = json.Marshal(event_interface)
- if err != nil {
- return
- }
- data = [][]byte{[]byte(NameOfStruct(event_interface)), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1
- return
-}
-
-func UnmarshalByteByte2Event(data [][]byte) (event interface{}, category string, err error) {
- if len(data) != 2 {
- return nil, "", errors.New("not a r3event message")
- }
- switch string(data[0]) {
- case "DoorLockUpdate":
- event = DoorLockUpdate{}
- err = json.Unmarshal(data[1],&event)
- category = "door"
- case "DoorAjarUpdate":
- event := DoorAjarUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "door"
- case "BackdoorAjarUpdate":
- event := DoorAjarUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "door"
- case "DoorCommandEvent":
- event := DoorCommandEvent{}
- err = json.Unmarshal(data[1], &event)
- category = "door"
- case "DoorProblemEvent":
- event := DoorProblemEvent{}
- err = json.Unmarshal(data[1], &event)
- category = "door"
- case "BoreDoomButtonPressEvent":
- event := BoreDoomButtonPressEvent{}
- err = json.Unmarshal(data[1], &event)
- category = "buttons"
- case "TempSensorUpdate":
- event := TempSensorUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "sensors"
- case "IlluminationSensorUpdate":
- event := IlluminationSensorUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "sensors"
- case "TimeTick":
- event := TimeTick{}
- err = json.Unmarshal(data[1], &event)
- category = "time"
- case "MovementSensorUpdate":
- event := MovementSensorUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "movement"
- case "PresenceUpdate":
- event := PresenceUpdate{}
- err = json.Unmarshal(data[1], &event)
- category = "presence"
- case "SomethingReallyIsMoving":
- event := SomethingReallyIsMoving{}
- err = json.Unmarshal(data[1], &event)
- category = "movement"
- default:
- event = nil
- err = errors.New("cannot unmarshal unknown type")
- category = ""
- }
- return
-}