public EventSignal <T> Send <T>(IConnection connection, string data) { string _url = connection.Url + "send"; string _customQueryString = GetCustomQueryString(connection); _url += String.Format( c_sendQueryString, m_transport, Uri.EscapeDataString(connection.ConnectionToken), _customQueryString); var _postData = new Dictionary <string, string> { { "data", data }, }; var _returnSignal = new EventSignal <T>(); var _postSignal = m_httpClient.PostAsync(_url, connection.PrepareRequest, _postData); _postSignal.Finished += (sender, e) => { string _raw = e.Result.ReadAsString(); if (String.IsNullOrEmpty(_raw)) { _returnSignal.OnFinish(default(T)); return; } Debug.WriteLine("HttpBasedTransport: finished send with raw result {0}", _raw); _returnSignal.OnFinish(JsonConvert.DeserializeObject <T>(_raw)); }; return(_returnSignal); }
internal static EventSignal <NegotiationResponse> GetNegotiationResponse( IHttpClient httpClient, IConnection connection) { string _negotiateUrl = connection.Url + "negotiate"; var _negotiateSignal = new EventSignal <NegotiationResponse>(); var _signal = httpClient.GetAsync(_negotiateUrl, connection.PrepareRequest); _signal.Finished += (sender, e) => { string _raw = e.Result.ReadAsString(); if (_raw == null) { throw new InvalidOperationException("Server negotiation failed."); } _negotiateSignal.OnFinish(JsonConvert.DeserializeObject <NegotiationResponse>(_raw)); }; return(_negotiateSignal); }