d00d4623434c5042ab9005266373eaa471166c29
[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
13 func MarshalEvent2ByteByte(event_interface interface{}) (data [][]byte, err error) {
14     var msg []byte
15     fmt.Printf("%T%+v\n", event_interface, event_interface)
16         msg, err = json.Marshal(event_interface)
17         if err != nil {
18                 return
19         }
20     etype := fmt.Sprintf("%T", event_interface)
21     etype_lastsep := strings.LastIndex(etype,".")
22     data = [][]byte{[]byte(etype[etype_lastsep+1:]), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1
23     return
24 }
25
26 func UnmarshalByteByte2Event(data [][]byte) (event interface{}, err error) {
27     if len(data) != 2 {
28         return nil, errors.New("not a r3event message")
29     }
30     switch string(data[0]) {
31         case "DoorLockUpdate":
32             event = new(DoorLockUpdate)
33             err = json.Unmarshal(data[1],event)
34         case "DoorAjarUpdate":
35             event := new(DoorAjarUpdate)
36             err = json.Unmarshal(data[1], event)
37         case "DoorCommandEvent":
38             event := new(DoorCommandEvent)
39             err = json.Unmarshal(data[1], event)
40         case "ButtonPressUpdate":
41             event := new(ButtonPressUpdate)
42             err = json.Unmarshal(data[1], event)
43         case "TempSensorUpdate":
44             event := new(TempSensorUpdate)
45             err = json.Unmarshal(data[1], event)
46         case "IlluminationSensorUpdate":
47             event := new(IlluminationSensorUpdate)
48             err = json.Unmarshal(data[1], event)
49         case "TimeTick":
50             event := new(TimeTick)
51             err = json.Unmarshal(data[1], event)
52         case "MovementSensorUpdate":
53             event := new(MovementSensorUpdate)
54             err = json.Unmarshal(data[1], event)
55         case "PresenceUpdate":
56             event := new(PresenceUpdate)
57             err = json.Unmarshal(data[1], event)
58         case "SomethingReallyIsMoving":
59             event := new(SomethingReallyIsMoving)
60             err = json.Unmarshal(data[1], event)
61         default:
62             event = nil
63             err = errors.New("cannot unmarshal unknown type")
64     }
65     return
66 }