client := metadata.NewMetadataServiceClient(conn)
stream, err := client.PullMetadata(context.Background())
ch := make(chan int, 8)
go func() {
for {
in, err := stream.Recv()
if err == io.EOF {
close(ch)
return
}
if err != nil {
log.Fatal(err)
}
switch data := in.Data.(type) {
case *metadata.PullMetadataResponse_Heartbeat:
//
case *metadata.PullMetadataResponse_ConfigUpdate:
//
case *metadata.PullMetadataResponse_Sample:
switch sampleData := data.Sample.Data.(type) {
case *metadata.MetadataSample_Tracklets:
log.Printf("Time: %v\nTracklets: %v", data.Sample.Timestamp, sampleData.Tracklets)
}
}
ch <- 1 // notify the main thread about receiving the sample
}
}()
endpoint := media.EndpointRef{AccessPoint: "hosts/SERVER/AVDetector.1/SourceEndpoint.vmda"}
req := metadata.PullMetadataRequest{
Count: 8, // ask for several samples, so that they are not lost while server waits for another response from client
Endpoint: &endpoint,
ProposedChannelIdleMs: 15000,
}
if err := stream.Send(&req); err != nil {
log.Fatal(err)
}
for {
// whenever a sample is received ask for another sample keeping the total samples requested to a fixed value > 1
<-ch
req := metadata.PullMetadataRequest{
Count: 1,
}
if err := stream.Send(&req); err != nil {
log.Fatal(err)
}
}
As a result, you will get the possible response options.