marshal events experiment
[svn42.git] / go / r3-eventbroker_zmq / marshal_events.go
diff --git a/go/r3-eventbroker_zmq/marshal_events.go b/go/r3-eventbroker_zmq/marshal_events.go
new file mode 100644 (file)
index 0000000..6999f58
--- /dev/null
@@ -0,0 +1,43 @@
+// (c) Bernhard Tittelbach, 2013
+
+package main
+
+import (
+    "encoding/json"
+    "fmt"
+    "errors"
+    )
+
+
+func MarshalEvent(event_interface interface{}) (data [][]byte, err error) {
+    var msg []byte
+    fmt.Printf("%T%+v\n", event_interface, event_interface)
+       msg, err = json.Marshal(event_interface)
+       if err != nil {
+               return
+       }
+    etype := []byte(fmt.Sprintf("%T", event_interface)[5:])
+    data = [][]byte{etype, msg}
+    return
+}
+
+func UnmarshalEvent(data [][]byte) (event interface{}, err error) {
+    switch string(data[0]) {
+        case "DoorLockUpdate":
+            typedevent := new(DoorLockUpdate)
+            err = json.Unmarshal(data[1], typedevent)
+            event = typedevent
+        case "DoorAjarUpdate":
+            typedevent := new(DoorAjarUpdate)
+            err = json.Unmarshal(data[1], typedevent)
+            event = typedevent
+        case "DoorCommandEvent":
+            typedevent := new(DoorCommandEvent)
+            err = json.Unmarshal(data[1], typedevent)
+            event = typedevent
+        default:
+            event = nil
+            err = errors.New("unknown type")
+    }
+    return
+}