"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)
+ //~ fmt.Printf("%T%+v\n", event_interface, event_interface)
msg, err = json.Marshal(event_interface)
if err != nil {
return
}
- etype := fmt.Sprintf("%T", event_interface)
- etype_lastsep := strings.LastIndex(etype,".")
- data = [][]byte{[]byte(etype[etype_lastsep+1:]), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1
+ 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{}, err error) {
+func UnmarshalByteByte2Event(data [][]byte) (event interface{}, category string, err error) {
if len(data) != 2 {
- return nil, errors.New("not a r3event message")
+ return nil, "", errors.New("not a r3event message")
}
switch string(data[0]) {
case "DoorLockUpdate":
- event = new(DoorLockUpdate)
- err = json.Unmarshal(data[1],event)
+ event = DoorLockUpdate{}
+ err = json.Unmarshal(data[1],&event)
+ category = "door"
case "DoorAjarUpdate":
- event := new(DoorAjarUpdate)
- err = json.Unmarshal(data[1], event)
+ 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 := new(DoorCommandEvent)
- err = json.Unmarshal(data[1], event)
- case "ButtonPressUpdate":
- event := new(ButtonPressUpdate)
- err = json.Unmarshal(data[1], event)
+ 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 := new(TempSensorUpdate)
- err = json.Unmarshal(data[1], event)
+ event := TempSensorUpdate{}
+ err = json.Unmarshal(data[1], &event)
+ category = "sensors"
case "IlluminationSensorUpdate":
- event := new(IlluminationSensorUpdate)
- err = json.Unmarshal(data[1], event)
+ event := IlluminationSensorUpdate{}
+ err = json.Unmarshal(data[1], &event)
+ category = "sensors"
case "TimeTick":
- event := new(TimeTick)
- err = json.Unmarshal(data[1], event)
+ event := TimeTick{}
+ err = json.Unmarshal(data[1], &event)
+ category = "time"
case "MovementSensorUpdate":
- event := new(MovementSensorUpdate)
- err = json.Unmarshal(data[1], event)
+ event := MovementSensorUpdate{}
+ err = json.Unmarshal(data[1], &event)
+ category = "movement"
case "PresenceUpdate":
- event := new(PresenceUpdate)
- err = json.Unmarshal(data[1], event)
+ event := PresenceUpdate{}
+ err = json.Unmarshal(data[1], &event)
+ category = "presence"
case "SomethingReallyIsMoving":
- event := new(SomethingReallyIsMoving)
- err = json.Unmarshal(data[1], event)
+ event := SomethingReallyIsMoving{}
+ err = json.Unmarshal(data[1], &event)
+ category = "movement"
default:
event = nil
err = errors.New("cannot unmarshal unknown type")
+ category = ""
}
return
}