private ButtplugPromise <T> Send <T>(ButtplugMessage message) where T : ButtplugMessage { ButtplugPromise <T> promise = new ButtplugPromise <T>(); Send(message, promise); return(promise); }
private void AddPromise(uint messageId, ButtplugPromise promise) { if (promise == null) { return; } lock (_callbackLocker) { _registeredPromises.Add(messageId, promise); } }
private async void Send(ButtplugMessage message, ButtplugPromise promise) { message.Id = GetNextMessageId(); AddPromise(message.Id, promise); try { CancellationTokenSource source = new CancellationTokenSource(_timeout); await _client.SendAsync(Jsonify(message), WebSocketMessageType.Text, true, source.Token); source.Dispose(); } catch (OperationCanceledException) { promise.Cancel(); GetPromise(message.Id); } }