private async Task <TransmissionResponse> SendRequestAsync(TransmissionRequest data) { #if DEBUG using (var client = new HttpClient(new LoggingHandler(new HttpClientHandler()))) #else using (var client = new HttpClient()) #endif { client.BaseAddress = new Uri(String.Format("http://{0}:{1}/", this.Host, this.Port)); client.Timeout = TimeSpan.FromSeconds(60); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Add(X_SESSION_HEADER, _SessionId); data.Tag = this.Tag; HttpResponseMessage response = await client.PostAsJsonAsync(this.Path, data); if (response.StatusCode == System.Net.HttpStatusCode.Conflict) { //Update SessionId and resend; foreach (var item in response.Headers) { if (item.Key == X_SESSION_HEADER) { _SessionId = item.Value.Last(); continue; } } return(await SendRequestAsync(data)); } else if (response.IsSuccessStatusCode) { var jsresult = await response.Content.ReadAsAsync <TransmissionResponse>(); return(jsresult); } return(null); } }
public TorrentAdded AddTorrent(AddTorrentArguments args) { TransmissionRequest request = new TransmissionRequest("torrent-add"); request.Arguments = new Dictionary <string, object>(); request.Arguments = args.ToDictionary(); var result = SendRequest(request); if (result.Result == "success") { var items = result.Deserialize <TorrentAddedArguments>(); return(items.TorrentAdded); } else if (result.Result == "duplicate torrent") { throw new DuplicateTorrentException(); } return(null); }
private TransmissionResponse SendRequest(TransmissionRequest data) { var task = SendRequestAsync(data); return(task.GetAwaiter().GetResult()); }