public override Task <BufferedFramesResponse> RequestBufferedFrames(BufferedFramesRequest request,
                                                                            Grpc.Core.ServerCallContext context)
        {
            var ret = new BufferedFramesResponse();

            try
            {
                foreach (var frame in _frames)
                {
                    if (frame.ReceiveStatus == VmbFrameStatusType.VmbFrameStatusComplete)
                    {
                        var output = MakeImageBuffer(new FrameData(frame));
                        var bs     = ByteString.FromStream(output);

                        ret.Images.Add(bs);
                    }
                }
            }
            catch (Exception e)
            {
                ret.Error = ServiceHelper.BuildError(e, Error.Types.Level.Error);
            }

            return(Task.FromResult(ret));
        }
        public override Task <CameraAcquisitionResponse> RequestCameraAcquisition(CameraAcquisitionRequest request,
                                                                                  Grpc.Core.ServerCallContext context)
        {
            var ret = new CameraAcquisitionResponse();

            try
            {
                lock (_acquisitionLock)
                {
                    if (_frames.Length != _numFrames)
                    {
                        _frames = new Frame[_numFrames];
                    }
                    _cameraInstance.AcquireMultipleImages(ref _frames, 10000);
                    if (_frameStreamWriter != null)
                    {
                        lock (_frameStreamWriterLock)
                        {
                            BufferedFramesResponse bufferedFrames = null;
                            foreach (var frame in _frames)
                            {
                                var ms = MakeImageBuffer(new FrameData(frame));
                                var bs = ByteString.FromStream(ms);
                                bufferedFrames = new BufferedFramesResponse();
                                bufferedFrames.Images.Add(bs);
                            }
                            _frameStreamWriter.WriteAsync(bufferedFrames);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                ret.Error = ServiceHelper.BuildError(e, Error.Types.Level.Error);
            }

            return(Task.FromResult(ret));
        }