func main() { joinTime := uint32(30) permitRequest := &nwkmgr.NwkSetPermitJoinReq{ PermitJoinTime: &joinTime, PermitJoin: nwkmgr.NwkPermitJoinTypeT_PERMIT_ALL.Enum(), } proto.SetDefaults(permitRequest) data, err := proto.Marshal(permitRequest) if err != nil { log.Fatal("marshaling error: ", err) } log.Printf("marshalled permit join to protobuf: %x", data) jsonData, err := json.Marshal(permitRequest) if err != nil { log.Fatal("marshaling error: ", err) } log.Printf("marshalled permit join to json: %s", jsonData) newTest := new(nwkmgr.NwkSetPermitJoinReq) err = proto.Unmarshal(data, newTest) if err != nil { log.Fatal("unmarshaling error: ", err) } if permitRequest.GetPermitJoinTime() != newTest.GetPermitJoinTime() { log.Fatalf("data mismatch %d != %d", permitRequest.GetPermitJoinTime(), newTest.GetPermitJoinTime()) } }
func TestProto3SetDefaults(t *testing.T) { in := &pb.Message{ Terrain: map[string]*pb.Nested{ "meadow": new(pb.Nested), }, Proto2Field: new(tpb.SubDefaults), Proto2Value: map[string]*tpb.SubDefaults{ "badlands": new(tpb.SubDefaults), }, } got := proto.Clone(in).(*pb.Message) proto.SetDefaults(got) // There are no defaults in proto3. Everything should be the zero value, but // we need to remember to set defaults for nested proto2 messages. want := &pb.Message{ Terrain: map[string]*pb.Nested{ "meadow": new(pb.Nested), }, Proto2Field: &tpb.SubDefaults{N: proto.Int64(7)}, Proto2Value: map[string]*tpb.SubDefaults{ "badlands": {N: proto.Int64(7)}, }, } if !proto.Equal(got, want) { t.Errorf("with in = %v\nproto.SetDefaults(in) =>\ngot %v\nwant %v", in, got, want) } }
func (s *ZStackServer) transmitCommand(command *zStackCommand) error { proto.SetDefaults(command.message) packet, err := proto.Marshal(command.message) if err != nil { log.Fatalf("%s: Outgoing marshaling error: %s", s.name, err) } log.Debugf("Protobuf packet %x", packet) buffer := new(bytes.Buffer) // Add the Z-Stack 4-byte header err = binary.Write(buffer, binary.LittleEndian, uint16(len(packet))) // Packet length err = binary.Write(buffer, binary.LittleEndian, s.subsystem) // Subsystem err = binary.Write(buffer, binary.LittleEndian, command.commandID) // Command Id _, err = buffer.Write(packet) log.Debugf("%s: Sending packet: % X", s.name, buffer.Bytes()) // Send it to the Z-Stack server _, err = s.conn.Write(buffer.Bytes()) return err }
func (c *Client) Send(message *api.CastMessage) error { proto.SetDefaults(message) data, err := proto.Marshal(message) if err != nil { return err } //spew.Dump("Writing", message) _, err = c.conn.Write(&data) return err }
func (d *Device) Send(urn, sourceId, destinationId string, payload responses.Payload) error { payloadJson, err := json.Marshal(payload) if err != nil { fmt.Println("Failed to json.Marshal: ", err) return err } payloadString := string(payloadJson) message := &api.CastMessage{ ProtocolVersion: api.CastMessage_CASTV2_1_0.Enum(), SourceId: &sourceId, DestinationId: &destinationId, Namespace: &urn, PayloadType: api.CastMessage_STRING.Enum(), PayloadUtf8: &payloadString, } proto.SetDefaults(message) data, err := proto.Marshal(message) if err != nil { fmt.Println("Failed to proto.Marshal: ", err) return err } if *message.Namespace != "urn:x-cast:com.google.cast.tp.heartbeat" { log.Println("Writing:", spew.Sdump(message)) } if d.conn == nil { return fmt.Errorf("We are disconnected, cannot send!") } _, err = d.wrapper.Write(data) return err }