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);
        }
Пример #2
0
        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);
        }