T HttpGet <T>(string url)
        {
            lock (_communicationLock)
            {
                try
                {
                    if (_client == null)
                    {
                        return(default(T));
                    }

                    var request = new NefitEasyHttpRequest(url, _client.MyJID, $"{CRrcGatewayPrefix}{_serial}@{CHost}");
                    _client.Send(request.ToString());

                    HttpRequestEvent?.Invoke(this, $"HttpGet->request: {request}");
                    var timeout = CRequestTimeout;

                    while (timeout > 0)
                    {
                        lock (_lockObj)
                        {
                            if (_lastMessage != null)
                            {
                                var decrypted = _encryptionHelper.Decrypt(_lastMessage.Payload);
                                HttpRequestEvent?.Invoke(this, $"HttpGet->decrypted: {decrypted}");

                                NefitJson <T> obj;

                                if (TryParseJsonString(decrypted, out obj))
                                {
                                    if (ConnectionStatus != NefitConnectionStatus.Connected)
                                    {
                                        UpdateConnectionStatus(NefitConnectionStatus.Connected);
                                    }
                                    _lastMessage = null;
                                    return(obj.Value);
                                }

                                UpdateConnectionStatus(NefitConnectionStatus.InvalidPassword);
                                timeout = 0;
                            }
                        }
                        timeout -= CCheckInterval;
                        Thread.Sleep(CCheckInterval);
                    }
                }
                catch (Exception e)
                {
                    ExceptionEvent?.Invoke(this, e);
                }
                return(default(T));
            }
        }
        bool HttpPut(string url, string data)
        {
            lock (_communicationLock)
            {
                try
                {
                    if (_client == null)
                    {
                        return(false);
                    }

                    var request = new NefitEasyHttpRequest(url, _client.MyJID, $"{CRrcGatewayPrefix}{_serial}@{CHost}", _encryptionHelper.Encrypt(data));
                    _client.Send(request.ToString());

                    HttpRequestEvent?.Invoke(this, $"HttpPut: {request}");
                    var timeout = CRequestTimeout;

                    while (timeout > 0)
                    {
                        lock (_lockObj)
                        {
                            if (_lastMessage != null)
                            {
                                var result = _lastMessage.Code == (int)HttpStatusCode.OK || _lastMessage.Code == (int)HttpStatusCode.NoContent;
                                if (result && ConnectionStatus != NefitConnectionStatus.Connected)
                                {
                                    UpdateConnectionStatus(NefitConnectionStatus.Connected);
                                }

                                _lastMessage = null;
                                return(result);
                            }
                        }
                        timeout -= CCheckInterval;
                        Thread.Sleep(CCheckInterval);
                    }
                }
                catch (Exception e)
                {
                    ExceptionEvent?.Invoke(this, e);
                }
                return(false);
            }
        }
示例#3
0
    /// <summary>
    /// 逐个请求
    /// </summary>
    /// <returns></returns>
    private IEnumerator preRequestPost()
    {
        if (requestQueue.Count <= 0)
        {
            yield break;
        }

        HttpRequestEvent[] hteArr = requestQueue.ToArray();
        requestQueue.Clear();
        isRequesting = true;
        //PanelManager panelManager = AppFacade.Instance.GetManager<PanelManager>();

        for (int i = 0; i < hteArr.Length; i++)
        {
            HttpRequestEvent req = hteArr[i];


            yield return(StartCoroutine(requestPostAsync(url, req.PostDatas, req.OnComplete)));
        }

        isRequesting = false;
        yield return(StartCoroutine(preRequestPost()));
    }
示例#4
0
    private void HttpRequest(string data, Action <string> callback, bool isThread = false)
    {
        if (isThread)
        {
            HttpRequestEvent hre = new HttpRequestEvent();
            hre.PostDatas  = data;
            hre.OnComplete = callback;
            lock (lockObj)
            {
                requestQueue.Enqueue(hre);
            }

            if (!isRequesting)
            {
                //PanelManager panelManager = AppFacade.Instance.GetManager<PanelManager>();
//                StartCoroutine(preRequestPost());
                preRequestPostThread();
            }
        }
        else
        {
            HttpPostAsync(url, data, callback);
        }
    }