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); } }
/// <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())); }
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); } }