public void TestStreamControl() { var openPortResult = client.RequestConnectToPort(new ConnectionRequest() { Connect = true, ComPort = _comPort }); Assert.IsNull(openPortResult.Error, "Port Open Failed"); client.RequestPowerStatus(new PowerStatusRequest() { Write = true, PowerCode = 3 }); Task.Delay(5000).Wait(); var stream = client.StreamRequestArmTrigger(new CallOptions()); var cancel = new CancellationTokenSource(); // receive Task.Run(async() => { while (await stream.ResponseStream.MoveNext(cancel.Token)) { _writer.WriteLine($"Got new message! {stream.ResponseStream.Current}"); } }); var requestData = new ArmTriggerRequest() { ArmTrigger = true, MaxTriggerTimeUs = 10000, LaserConfiguration = new LaserStatusRequest() { Intensity = 255, DurationUs = 45 } }; for (int i = 0; i < 3; i++) { stream.RequestStream.WriteAsync(requestData); Task.Delay(500).Wait(); } cancel.Cancel(); }
public override Task <ArmTriggerResponse> RequestArmTrigger(ArmTriggerRequest request, ServerCallContext context) { captureMonopoly = true; var response = new ArmTriggerResponse(); var laserConfiguration = request.LaserConfiguration; response.Error = InvokeCommand("P", new[] { laserConfiguration.Intensity.ToString() }, true); if (response.Error != null) { goto exit; } response.Error = InvokeCommand("D", new[] { laserConfiguration.DurationUs.ToString() }, true); if (response.Error != null) { goto exit; } response.Error = InvokeCommand("M", new[] { request.MaxTriggerTimeUs.ToString() }, true); if (response.Error != null) { goto exit; } response.TriggerAutoDisarmed = false; if (request.ArmTrigger) { string outString = ""; response.Error = InvokeCommandWithResponse("B", null, ref outString, calledByArmTrigger: true); if (response.Error != null) { goto exit; } response.TriggerAutoDisarmed = outString == "1"; } exit: captureMonopoly = false; return(Task.FromResult(response)); }