private SoapMessage <object> ReceiveMessageInternal(WaitMessageType type, string stepName, string noMessageText, bool checkIP, bool checkDeviceId, Action afterStartAction, Action <SoapMessage <object> > validationAction, int timeout) { return(ReceiveMessageInternal(type, stepName, noMessageText, checkIP, checkDeviceId, afterStartAction, null, validationAction, timeout)); }
/// <summary> /// Receives message of specified type from DUT /// </summary> /// <param name="timeout">Time to wait</param> /// <param name="checkIP">if true wait from current device IP</param> /// <param name="checkDeviceId">if true wait for current device uuid</param> /// <param name="action">additional action after begin waiting</param> /// <returns>Message</returns> private SoapMessage <object> ReceiveMessageInternal( WaitMessageType type, string stepName, string noMessageText, bool checkIP, bool checkDeviceId, Action action, Action <SoapMessage <object> > validation, int timeout) { Discovery discovery = new Discovery(_nic.IP); bool waitHello = (type & WaitMessageType.Hello) != 0; bool waitBye = (type & WaitMessageType.Bye) != 0; if (waitHello) { discovery.HelloReceived += OnHelloReceived; } if (waitBye) { discovery.ByeReceived += OnByeReceived; } discovery.ReceiveError += OnDiscoveryError; discovery.DiscoveryFinished += OnDiscoveryFinished; _eventTimeout.Reset(); _eventHelloReceived.Reset(); _eventByeReceived.Reset(); _eventDiscoveryError.Reset(); SoapMessage <object> response = null; try { if (waitBye && waitHello) { discovery.WaitByeOrHello(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } else if (waitBye) { discovery.WaitBye(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } else { discovery.WaitHello(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } if (action != null) { action(); } RunStep(() => { int res = WaitForResponse(new WaitHandle[] { _eventHelloReceived, _eventByeReceived, _eventDiscoveryError, _eventTimeout }); if (((res == 0) && waitHello) || ((res == 1) && waitBye)) { response = _message; } else if (res == 2) { string message = _error.Message + _error.InnerException ?? " " + _error.InnerException.Message; throw new AssertException(message); } else if (noMessageText != null) { throw new AssertException(noMessageText); } if (validation != null) { validation(response); } }, stepName); } finally { discovery.Close(); } return(response); }
/// <summary> /// Receives message of specified type from DUT /// </summary> /// <param name="timeout">Time to wait</param> /// <param name="checkIP">if true wait from current device IP</param> /// <param name="checkDeviceId">if true wait for current device uuid</param> /// <param name="afterStartAction">additional afterStartAction after begin waiting</param> /// <returns>Message</returns> private SoapMessage <object> ReceiveMessageInternal(WaitMessageType type, string stepName, string noMessageText, bool checkIP, bool checkDeviceId, Action afterStartAction, Discovery.MessageFilterFunction messageFilter, Action <SoapMessage <object> > validationAction, int timeout) { Discovery discovery = new Discovery(_nic.IP) { MessageFilter = messageFilter }; bool waitHello = (type & WaitMessageType.Hello) != 0; bool waitBye = (type & WaitMessageType.Bye) != 0; if (waitHello) { discovery.HelloReceived += OnHelloReceived; } if (waitBye) { discovery.ByeReceived += OnByeReceived; } discovery.ReceiveError += OnDiscoveryError; discovery.DiscoveryFinished += OnDiscoveryFinished; _eventTimeout.Reset(); _eventHelloReceived.Reset(); _eventByeReceived.Reset(); _eventDiscoveryError.Reset(); SoapMessage <object> response = null; try { var title = string.Format("Waiting for {0} message...", waitBye ? "Bye" : "Hello"); if (waitBye && waitHello) { title = string.Format("Waiting for {0} message...", "Bye or Hello"); } { BeginStep(title); if (waitBye && waitHello) { discovery.WaitByeOrHello(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } else if (waitBye) { discovery.WaitBye(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } else { discovery.WaitHello(checkIP ? _cameraIp : null, checkDeviceId ? _cameraId : null, timeout); } StepPassed(); } if (afterStartAction != null) { afterStartAction(); } RunStep(() => { int res = WaitForResponse(new WaitHandle[] { _eventHelloReceived, _eventByeReceived, _eventDiscoveryError, _eventTimeout }); if (((res == 0) && waitHello) || ((res == 1) && waitBye)) { response = _message; if (_message != null) { string dump = System.Text.Encoding.UTF8.GetString(_message.Raw); LogResponse(dump); } } else if (res == 2) { string message = _error.Message + _error.InnerException ?? " " + _error.InnerException.Message; throw new AssertException(message); } else if (noMessageText != null) { throw new AssertException(noMessageText); } if (validationAction != null) { validationAction(response); } }, stepName); } finally { discovery.Close(); } return(response); }