1 // (c) Bernhard Tittelbach, 2013
12 func NameOfStruct(evi interface{}) (name string) {
13 etype := fmt.Sprintf("%T", evi)
14 etype_lastsep := strings.LastIndex(etype,".")
15 return etype[etype_lastsep+1:] //works in all cases for etype_lastsep in range -1 to len(etype)-1
18 func MarshalEvent2ByteByte(event_interface interface{}) (data [][]byte, err error) {
20 //~ fmt.Printf("%T%+v\n", event_interface, event_interface)
21 msg, err = json.Marshal(event_interface)
25 data = [][]byte{[]byte(NameOfStruct(event_interface)), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1
29 func UnmarshalByteByte2Event(data [][]byte) (event interface{}, err error) {
31 return nil, errors.New("not a r3event message")
33 switch string(data[0]) {
34 case "DoorLockUpdate":
35 event = new(DoorLockUpdate)
36 err = json.Unmarshal(data[1],event)
37 case "DoorAjarUpdate":
38 event := new(DoorAjarUpdate)
39 err = json.Unmarshal(data[1], event)
40 case "BackdoorAjarUpdate":
41 event := new(DoorAjarUpdate)
42 err = json.Unmarshal(data[1], event)
43 case "DoorCommandEvent":
44 event := new(DoorCommandEvent)
45 err = json.Unmarshal(data[1], event)
46 case "BoreDoomButtonPressEvent":
47 event := new(BoreDoomButtonPressEvent)
48 err = json.Unmarshal(data[1], event)
49 case "TempSensorUpdate":
50 event := new(TempSensorUpdate)
51 err = json.Unmarshal(data[1], event)
52 case "IlluminationSensorUpdate":
53 event := new(IlluminationSensorUpdate)
54 err = json.Unmarshal(data[1], event)
56 event := new(TimeTick)
57 err = json.Unmarshal(data[1], event)
58 case "MovementSensorUpdate":
59 event := new(MovementSensorUpdate)
60 err = json.Unmarshal(data[1], event)
61 case "PresenceUpdate":
62 event := new(PresenceUpdate)
63 err = json.Unmarshal(data[1], event)
64 case "SomethingReallyIsMoving":
65 event := new(SomethingReallyIsMoving)
66 err = json.Unmarshal(data[1], event)
69 err = errors.New("cannot unmarshal unknown type")