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 "DoorCommandEvent":
41 event := new(DoorCommandEvent)
42 err = json.Unmarshal(data[1], event)
43 case "ButtonPressUpdate":
44 event := new(ButtonPressUpdate)
45 err = json.Unmarshal(data[1], event)
46 case "TempSensorUpdate":
47 event := new(TempSensorUpdate)
48 err = json.Unmarshal(data[1], event)
49 case "IlluminationSensorUpdate":
50 event := new(IlluminationSensorUpdate)
51 err = json.Unmarshal(data[1], event)
53 event := new(TimeTick)
54 err = json.Unmarshal(data[1], event)
55 case "MovementSensorUpdate":
56 event := new(MovementSensorUpdate)
57 err = json.Unmarshal(data[1], event)
58 case "PresenceUpdate":
59 event := new(PresenceUpdate)
60 err = json.Unmarshal(data[1], event)
61 case "SomethingReallyIsMoving":
62 event := new(SomethingReallyIsMoving)
63 err = json.Unmarshal(data[1], event)
66 err = errors.New("cannot unmarshal unknown type")