public bool WaitFor(TimeSpan?timeout, params CallState[] states) { if (Array.Exists(states, s => State == s)) { return(true); } if (!timeout.HasValue) { timeout = TimeSpan.FromMilliseconds(-1); } bool ret = false; CancellationTokenSource cancelDelay = new CancellationTokenSource(); Client.ClientCallback disconnectedCallback = c => { cancelDelay.Cancel(); }; StateChangeCallback stateChangeCallback = (a, c, e, p) => { ret = Array.Exists(states, s => p.CallState == s); cancelDelay.Cancel(); }; API.API.Client.OnDisconnected += disconnectedCallback; OnStateChange += stateChangeCallback; Task.Delay(timeout.Value, cancelDelay.Token).Wait(); OnStateChange -= stateChangeCallback; API.API.Client.OnDisconnected -= disconnectedCallback; return(ret); }
public void SetStateChangeCallback(StateChangeCallback action) { stateChangeCallback += action; }