X-Git-Url: https://git.realraum.at/?a=blobdiff_plain;f=go%2Fr3-eventbroker_zmq%2Fr3events%2Fmarshal_events.go;fp=go%2Fr3-eventbroker_zmq%2Fr3events%2Fmarshal_events.go;h=d00d4623434c5042ab9005266373eaa471166c29;hb=417e9a91ef92b248513da9f2be83519d37c599e7;hp=0000000000000000000000000000000000000000;hpb=837698930d5eea7c100a1233ee1d92e71896bb5d;p=svn42.git diff --git a/go/r3-eventbroker_zmq/r3events/marshal_events.go b/go/r3-eventbroker_zmq/r3events/marshal_events.go new file mode 100644 index 0000000..d00d462 --- /dev/null +++ b/go/r3-eventbroker_zmq/r3events/marshal_events.go @@ -0,0 +1,66 @@ +// (c) Bernhard Tittelbach, 2013 + +package r3events + +import ( + "encoding/json" + "fmt" + "errors" + "strings" + ) + + +func MarshalEvent2ByteByte(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 := fmt.Sprintf("%T", event_interface) + etype_lastsep := strings.LastIndex(etype,".") + data = [][]byte{[]byte(etype[etype_lastsep+1:]), msg} //works in all cases for etype_lastsep in range -1 to len(etype)-1 + return +} + +func UnmarshalByteByte2Event(data [][]byte) (event interface{}, err error) { + if len(data) != 2 { + return nil, errors.New("not a r3event message") + } + switch string(data[0]) { + case "DoorLockUpdate": + event = new(DoorLockUpdate) + err = json.Unmarshal(data[1],event) + case "DoorAjarUpdate": + event := new(DoorAjarUpdate) + err = json.Unmarshal(data[1], event) + case "DoorCommandEvent": + event := new(DoorCommandEvent) + err = json.Unmarshal(data[1], event) + case "ButtonPressUpdate": + event := new(ButtonPressUpdate) + err = json.Unmarshal(data[1], event) + case "TempSensorUpdate": + event := new(TempSensorUpdate) + err = json.Unmarshal(data[1], event) + case "IlluminationSensorUpdate": + event := new(IlluminationSensorUpdate) + err = json.Unmarshal(data[1], event) + case "TimeTick": + event := new(TimeTick) + err = json.Unmarshal(data[1], event) + case "MovementSensorUpdate": + event := new(MovementSensorUpdate) + err = json.Unmarshal(data[1], event) + case "PresenceUpdate": + event := new(PresenceUpdate) + err = json.Unmarshal(data[1], event) + case "SomethingReallyIsMoving": + event := new(SomethingReallyIsMoving) + err = json.Unmarshal(data[1], event) + default: + event = nil + err = errors.New("cannot unmarshal unknown type") + } + return +}