Example #1
0
    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);
    }
Example #2
0
    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);
    }
Example #4
0
 private static extern QwfsResult qwfsGetStatus(ulong hostId, out Http3Sharp.Status status);