private static void RequestError(ulong hostId, Http3Sharp.Status status, string errorDetail) { Debug.Assert(_responseForEachHost.ContainsKey(hostId)); var res = new Http3Sharp.ResponseParamaters { Status = status, ErrorMessage = errorDetail, }; // header 欲しいかも _responseForEachHost[hostId].Add(res); }
public List <Http3Sharp.ResponseParamaters> Update(out Http3Sharp.Status status, out ulong progress, out ulong totalWriteSize) { // Update スレッドの監視とか本当はした方がいいがとりあえずなし status = Http3Sharp.Status.Wait; progress = 0; totalWriteSize = 0; _responseForEachHost[_hostId].Clear(); lock (_lockObject) { var result = qwfsGetProgress(_hostId, out progress, out totalWriteSize); Debug.Assert(QwfsResult.Ok == result); result = qwfsIssueCallbacks(_hostId); Debug.Assert(QwfsResult.Ok == result); result = qwfsGetStatus(_hostId, out status); Debug.Assert(QwfsResult.Ok == result); } return(_responseForEachHost[_hostId]); }
protected List <Http3Sharp.ResponseParamaters> Http3Update() { var resList = new List <Http3Sharp.ResponseParamaters>(); if (null == Http3) { return(resList); } // リクエストを開始していない、終了した状態でも Update は呼び出してコネクションの状態を監視する必要がある. resList = Http3.Update(out Http3Sharp.Status status, out ulong progress, out ulong totalWriteSize); Http3Status = status; Http3Progress = progress; if (0 == TotalDownloadSize) { // このフレームにダウンロードした値 / 今までにダウンロードした値 Progress.text = $"{Http3Progress}/{totalWriteSize}"; } else { if (0 < totalWriteSize) { // 今までにダウンロードした値 / ダウンロード予定の値の合計値 Progress.text = $"{totalWriteSize}/{TotalDownloadSize}"; } } // ステータスの確認 Status.text = status.ToString(); // 通信完了状態か if ((Http3Sharp.Status.Wait == status) && (Http3Sharp.Status.Wait != _preStatus)) { _isRetry = false; } // エラー状態か if (Http3Sharp.Status.Wait > status) { var sb = new StringBuilder(); sb.AppendLine("ERROR!!"); sb.AppendLine($"{Http3.GetErrorDetail()}"); ErrorDetail.text = sb.ToString(); // エラー状態になったら Retry か Abort してあげる必要がある } else { ErrorDetail.text = string.Empty; } // スタート可能か → OK 且つリトライ、アボート中でないなら可能 ( Http3Sharp の仕様的にはいつでも詰めるがサンプルの仕様) StartButton.interactable = (Http3Sharp.Status.Wait == status); // リトライ可能か → エラー状態且つリトライ完了してないなら可能 RetryButton.interactable = ((Http3Sharp.Status.Wait > status) && !_isRetry); // アボート可能か → アボート中以外なら可能 AbortButton.interactable = (Http3Sharp.Status.Aborting != status); _preStatus = status; return(resList); }
private static extern QwfsResult qwfsGetStatus(ulong hostId, out Http3Sharp.Status status);