rename PanicButton to BoreDooomButton and eliminate door id
[svn42.git] / go / r3-eventbroker_zmq / r3events / marshal_events.go
1 // (c) Bernhard Tittelbach, 2013
2
3 package r3events
4
5 import (
6     "encoding/json"
7     "fmt"
8     "errors"
9     "strings"
10     )
11
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
16 }
17
18 func MarshalEvent2ByteByte(event_interface interface{}) (data [][]byte, err error) {
19     var msg []byte
20     //~ fmt.Printf("%T%+v\n", event_interface, event_interface)
21         msg, err = json.Marshal(event_interface)
22         if err != nil {
23                 return
24         }
25     data = [][]byte{[]byte(NameOfStruct(event_interface)), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1
26     return
27 }
28
29 func UnmarshalByteByte2Event(data [][]byte) (event interface{}, err error) {
30     if len(data) != 2 {
31         return nil, errors.New("not a r3event message")
32     }
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)
55         case "TimeTick":
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)
67         default:
68             event = nil
69             err = errors.New("cannot unmarshal unknown type")
70     }
71     return
72 }