+++ /dev/null
-// (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":
- newevent := new(DoorLockUpdate)
- err = json.Unmarshal(data[1],newevent)
- category = "door"
- event = *newevent
- case "DoorAjarUpdate":
- newevent := new(DoorAjarUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "door"
- event = *newevent
- case "BackdoorAjarUpdate":
- newevent := new(BackdoorAjarUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "door"
- event = *newevent
- case "DoorCommandEvent":
- newevent := new(DoorCommandEvent)
- err = json.Unmarshal(data[1], newevent)
- category = "door"
- event = *newevent
- case "DoorProblemEvent":
- newevent := new(DoorProblemEvent)
- err = json.Unmarshal(data[1], newevent)
- category = "door"
- event = *newevent
- case "DoorManualMovementEvent":
- newevent := new(DoorManualMovementEvent)
- err = json.Unmarshal(data[1], newevent)
- category = "door"
- event = *newevent
- case "BoreDoomButtonPressEvent":
- newevent := new(BoreDoomButtonPressEvent)
- err = json.Unmarshal(data[1], newevent)
- category = "buttons"
- event = *newevent
- case "TempSensorUpdate":
- newevent := new(TempSensorUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "IlluminationSensorUpdate":
- newevent := new(IlluminationSensorUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "DustSensorUpdate":
- newevent := new(DustSensorUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "RelativeHumiditySensorUpdate":
- newevent := new(RelativeHumiditySensorUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "TimeTick":
- newevent := new(TimeTick)
- err = json.Unmarshal(data[1], newevent)
- category = "time"
- event = *newevent
- case "GasLeakAlert":
- newevent := new(GasLeakAlert)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "MovementSensorUpdate":
- newevent := new(MovementSensorUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "movement"
- event = *newevent
- case "PresenceUpdate":
- newevent := new(PresenceUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "presence"
- event = *newevent
- case "SomethingReallyIsMoving":
- newevent := new(SomethingReallyIsMoving)
- err = json.Unmarshal(data[1], newevent)
- category = "movement"
- event = *newevent
- case "TempSensorSpike":
- newevent := new(TempSensorSpike)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "DustSensorSpike":
- newevent := new(DustSensorSpike)
- err = json.Unmarshal(data[1], newevent)
- category = "sensors"
- event = *newevent
- case "NetDHCPACK":
- newevent := new(NetDHCPACK)
- err = json.Unmarshal(data[1], newevent)
- category = "network"
- event = *newevent
- case "NetGWStatUpdate":
- newevent := new(NetGWStatUpdate)
- err = json.Unmarshal(data[1], newevent)
- category = "network"
- event = *newevent
- default:
- event = nil
- err = errors.New("cannot unmarshal unknown type")
- category = ""
- }
- return
-}