Ejemplo n.º 1
0
        private async Task <LicensorResponse> GetResponseAsync(LicensorRequest request, int timeoutMilliseconds = 30 * 1000)
        {
            try
            {
                TaskCompletionSource <LicensorResponse> taskCompletionSource = new TaskCompletionSource <LicensorResponse>(TaskCreationOptions.RunContinuationsAsynchronously);
                responseTasks.Add(request.RequestId, taskCompletionSource);
                CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(timeoutMilliseconds);
                cancellationTokenSource.Token.ThrowIfCancellationRequested();
                var responseTask     = taskCompletionSource.Task;
                var responseWaitTask = Task.Run(async() => await responseTask.ConfigureAwait(false), cancellationTokenSource.Token);
                while (responseWaitTask.Status == TaskStatus.Running)
                {
                    cancellationTokenSource.Token.ThrowIfCancellationRequested();
                    await Task.Delay(100).ConfigureAwait(false);
                }
                var response = await responseWaitTask.ConfigureAwait(false);

                cancellationTokenSource.Dispose();
                return(response);
            }
            catch (TaskCanceledException)
            {
                throw new ResponseException("Response timed out.");
            }
        }
Ejemplo n.º 2
0
 private async Task SendRequestAsync(LicensorRequest request)
 {
     Console.WriteLine($"Sending request: {request.RequestType}");
     byte[] requestBytes = ObjectSerializer.ObjectToByteArray(request);
     if (IsEncrypted)
     {
         requestBytes = Encryptor.SymmetricDataEncrypt(
             requestBytes,
             NodeData.Instance.NodeKeys.SignPrivateKey,
             symmetricKey,
             MessageDataType.Binary,
             NodeData.Instance.NodeKeys.Password);
     }
     await webSocket.SendAsync(requestBytes, WebSocketMessageType.Binary, true, CancellationToken.None).ConfigureAwait(false);
 }