playback 기능 추가
This commit is contained in:
@@ -15,22 +15,22 @@ using UVC.Log;
|
||||
namespace UVC.Network
|
||||
{
|
||||
/// <summary>
|
||||
/// HTTP 요청을 처리하기 위한 유틸리티 클래스
|
||||
/// HTTP 요청을 처리하기 위한 유틸리티 클래스
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 이 클래스는 REST API 호출을 위한 메소드들을 제공합니다.
|
||||
/// GET, POST 요청 및 파일 다운로드를 지원하며 요청/응답 로깅 기능도 포함합니다.
|
||||
/// 요청은 비동기(UniTask)로 처리됩니다.
|
||||
/// 이 클래스는 REST API 호출을 위한 메소드들을 제공합니다.
|
||||
/// GET, POST 요청 및 파일 다운로드를 지원하며 요청/응답 로깅 기능도 포함합니다.
|
||||
/// 요청은 비동기(UniTask)로 처리됩니다.
|
||||
///
|
||||
/// 기본 사용법:
|
||||
/// 기본 사용법:
|
||||
/// <code>
|
||||
/// // 도메인 설정
|
||||
/// // 도메인 설정
|
||||
/// HttpRequester.Domain = "https://api.example.com";
|
||||
///
|
||||
/// // GET 요청 예제
|
||||
/// // GET 요청 예제
|
||||
/// var products = await HttpRequester.RequestGet<List<Product>>("/api/products");
|
||||
///
|
||||
/// // POST 요청 예제
|
||||
/// // POST 요청 예제
|
||||
/// var loginData = new Dictionary<string, object>
|
||||
/// {
|
||||
/// { "username", "user@example.com" },
|
||||
@@ -42,23 +42,23 @@ namespace UVC.Network
|
||||
public class HttpRequester
|
||||
{
|
||||
/// <summary>
|
||||
/// 기본 도메인 주소입니다.
|
||||
/// 기본 도메인 주소입니다.
|
||||
/// </summary>
|
||||
public static string Domain { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary 형태의 본문을 가진 사용자 정의 HTTP 메소드로 API 요청을 수행합니다.
|
||||
/// Dictionary 형태의 본문을 가진 사용자 정의 HTTP 메소드로 API 요청을 수행합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="method">HTTP 메소드 (get, post, put 등)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="method">HTTP 메소드 (get, post, put 등)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // PUT 요청 예제
|
||||
/// // PUT 요청 예제
|
||||
/// public async UniTask<ProductResponse> UpdateProductAsync(int productId, string name, float price)
|
||||
/// {
|
||||
/// var body = new Dictionary<string, object>
|
||||
@@ -78,18 +78,18 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 문자열 형태의 본문을 가진 사용자 정의 HTTP 메소드로 API 요청을 수행합니다.
|
||||
/// 문자열 형태의 본문을 가진 사용자 정의 HTTP 메소드로 API 요청을 수행합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="method">HTTP 메소드 (get, post, put 등)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="method">HTTP 메소드 (get, post, put 등)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // DELETE 요청 예제
|
||||
/// // DELETE 요청 예제
|
||||
/// public async UniTask<bool> DeleteResourceAsync(string resourceId)
|
||||
/// {
|
||||
/// string jsonBody = $"{{\"id\": \"{resourceId}\"}}";
|
||||
@@ -105,17 +105,17 @@ namespace UVC.Network
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary를 JSON body로 변환하여 POST 요청을 수행합니다.
|
||||
/// Dictionary를 JSON body로 변환하여 POST 요청을 수행합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 사용자 로그인 요청 예제
|
||||
/// // 사용자 로그인 요청 예제
|
||||
/// public async UniTask<LoginResponse> LoginAsync(string username, string password)
|
||||
/// {
|
||||
/// var body = new Dictionary<string, object>
|
||||
@@ -127,7 +127,7 @@ namespace UVC.Network
|
||||
/// return await HttpRequester.RequestPost<LoginResponse>("/api/login", body);
|
||||
/// }
|
||||
///
|
||||
/// // LoginResponse 클래스 예제
|
||||
/// // LoginResponse 클래스 예제
|
||||
/// [Serializable]
|
||||
/// public class LoginResponse
|
||||
/// {
|
||||
@@ -142,17 +142,17 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 문자열 형태의 JSON을 body로 사용하여 POST 요청을 수행합니다.
|
||||
/// 문자열 형태의 JSON을 body로 사용하여 POST 요청을 수행합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 사용자 정의 JSON 문자열로 요청하는 예제
|
||||
/// // 사용자 정의 JSON 문자열로 요청하는 예제
|
||||
/// public async UniTask<ProductResponse> UpdateProductAsync(int productId, string productName)
|
||||
/// {
|
||||
/// string jsonBody = $"{{\"id\": {productId}, \"name\": \"{productName}\"}}";
|
||||
@@ -167,17 +167,17 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// GET 방식으로 API를 호출합니다.
|
||||
/// GET 방식으로 API를 호출합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청에 포함할 파라미터 (URL 쿼리스트링으로 변환)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청에 포함할 파라미터 (URL 쿼리스트링으로 변환)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 상품 목록을 가져오는 예제
|
||||
/// // 상품 목록을 가져오는 예제
|
||||
/// public async UniTask<List<Product>> GetProductsAsync(int page = 1, int pageSize = 20)
|
||||
/// {
|
||||
/// var queryParams = new Dictionary<string, object>
|
||||
@@ -189,7 +189,7 @@ namespace UVC.Network
|
||||
/// return await HttpRequester.RequestGet<List<Product>>("/api/products", queryParams);
|
||||
/// }
|
||||
///
|
||||
/// // Product 클래스 예제
|
||||
/// // Product 클래스 예제
|
||||
/// [Serializable]
|
||||
/// public class Product
|
||||
/// {
|
||||
@@ -205,23 +205,23 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// HTTP 요청을 처리하는 내부 메소드
|
||||
/// HTTP 요청을 처리하는 내부 메소드
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 이 메소드는 모든 HTTP 요청의 공통 로직을 처리합니다:
|
||||
/// - URL 구성 (Domain과 상대 경로 결합)
|
||||
/// - HTTP 메소드 설정
|
||||
/// - 헤더 설정
|
||||
/// - 요청 로깅
|
||||
/// - 응답 처리 및 역직렬화
|
||||
/// 이 메소드는 모든 HTTP 요청의 공통 로직을 처리합니다:
|
||||
/// - URL 구성 (Domain과 상대 경로 결합)
|
||||
/// - HTTP 메소드 설정
|
||||
/// - 헤더 설정
|
||||
/// - 요청 로깅
|
||||
/// - 응답 처리 및 역직렬화
|
||||
/// </remarks>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="body">요청 본문 (JSON 문자열)</param>
|
||||
/// <param name="methodString">HTTP 메소드 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="body">요청 본문 (JSON 문자열)</param>
|
||||
/// <param name="methodString">HTTP 메소드 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터</returns>
|
||||
private static async UniTask<T> Request_<T>(string url, string body = null, string methodString = "post", Dictionary<string, string> header = null, bool useAuth = false)
|
||||
{
|
||||
HTTPMethods method = StringToMethod(methodString);
|
||||
@@ -257,7 +257,7 @@ namespace UVC.Network
|
||||
log.ResponseData = response;
|
||||
log.ResponseDate = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
|
||||
ServerLog.LogHttpResponse(log);
|
||||
//T가 string이면
|
||||
//T가 string이면
|
||||
if (typeof(T) == typeof(string))
|
||||
{
|
||||
return (T)(object)response;
|
||||
@@ -269,17 +269,17 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dictionary를 JSON body로 변환하여 POST 요청을 수행하고 처리 시간도 함께 반환합니다.
|
||||
/// Dictionary를 JSON body로 변환하여 POST 요청을 수행하고 처리 시간도 함께 반환합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 Dictionary 데이터 (null 가능)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 서버 응답 시간을 측정하는 예제
|
||||
/// // 서버 응답 시간을 측정하는 예제
|
||||
/// public async UniTask<(UserData, TimeSpan)> GetUserDataWithPerformanceCheck(int userId)
|
||||
/// {
|
||||
/// var body = new Dictionary<string, object>
|
||||
@@ -289,7 +289,7 @@ namespace UVC.Network
|
||||
///
|
||||
/// var (userData, duration) = await HttpRequester.RequestPostWithDuration<UserData>("/api/users/details", body);
|
||||
///
|
||||
/// Debug.Log($"API 응답 시간: {duration.TotalMilliseconds}ms");
|
||||
/// Debug.Log($"API 응답 시간: {duration.TotalMilliseconds}ms");
|
||||
/// return (userData, duration);
|
||||
/// }
|
||||
/// </code>
|
||||
@@ -300,26 +300,26 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 문자열 형태의 JSON을 body로 사용하여 POST 요청을 수행하고 처리 시간도 함께 반환합니다.
|
||||
/// 문자열 형태의 JSON을 body로 사용하여 POST 요청을 수행하고 처리 시간도 함께 반환합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청 본문으로 전송할 JSON 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 커스텀 JSON으로 요청하고 응답 시간을 측정하는 예제
|
||||
/// // 커스텀 JSON으로 요청하고 응답 시간을 측정하는 예제
|
||||
/// public async UniTask<(APIResponse, TimeSpan)> SendComplexDataWithTiming(string jsonData)
|
||||
/// {
|
||||
/// // jsonData는 이미 직렬화된 JSON 문자열
|
||||
/// // jsonData는 이미 직렬화된 JSON 문자열
|
||||
///
|
||||
/// var (response, duration) = await HttpRequester.RequestPostWithDuration<APIResponse>("/api/complex-operation", jsonData);
|
||||
///
|
||||
/// if (duration.TotalSeconds > 1.0)
|
||||
/// {
|
||||
/// Debug.LogWarning($"API 응답이 느립니다: {duration.TotalSeconds}초");
|
||||
/// Debug.LogWarning($"API 응답이 느립니다: {duration.TotalSeconds}초");
|
||||
/// }
|
||||
///
|
||||
/// return (response, duration);
|
||||
@@ -332,33 +332,33 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// GET 방식으로 API를 호출하고 처리 시간도 함께 반환합니다.
|
||||
/// GET 방식으로 API를 호출하고 처리 시간도 함께 반환합니다.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청에 포함할 파라미터 (URL 쿼리스트링으로 변환)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL (http가 포함되지 않은 경우 Domain과 결합)</param>
|
||||
/// <param name="body">요청에 포함할 파라미터 (URL 쿼리스트링으로 변환)</param>
|
||||
/// <param name="header">추가할 헤더 정보 (null 가능)</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 서버 상태 확인 및 응답 시간 측정 예제
|
||||
/// // 서버 상태 확인 및 응답 시간 측정 예제
|
||||
/// public async UniTask<(ServerStatus, TimeSpan)> CheckServerStatus()
|
||||
/// {
|
||||
/// var (status, duration) = await HttpRequester.RequestGetWithDuration<ServerStatus>("/api/server/status");
|
||||
///
|
||||
/// // 응답 시간에 따른 서버 상태 평가
|
||||
/// // 응답 시간에 따른 서버 상태 평가
|
||||
/// if (duration.TotalMilliseconds < 100)
|
||||
/// {
|
||||
/// Debug.Log("서버 응답 상태: 매우 좋음");
|
||||
/// Debug.Log("서버 응답 상태: 매우 좋음");
|
||||
/// }
|
||||
/// else if (duration.TotalMilliseconds < 500)
|
||||
/// {
|
||||
/// Debug.Log("서버 응답 상태: 양호");
|
||||
/// Debug.Log("서버 응답 상태: 양호");
|
||||
/// }
|
||||
/// else
|
||||
/// {
|
||||
/// Debug.Log("서버 응답 상태: 지연됨");
|
||||
/// Debug.Log("서버 응답 상태: 지연됨");
|
||||
/// }
|
||||
///
|
||||
/// return (status, duration);
|
||||
@@ -371,24 +371,24 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// HTTP 요청을 처리하고 처리 시간을 측정하는 내부 메소드
|
||||
/// HTTP 요청을 처리하고 처리 시간을 측정하는 내부 메소드
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 이 메소드는 모든 성능 측정이 필요한 HTTP 요청의 공통 로직을 처리합니다:
|
||||
/// - 요청 처리 시간 측정
|
||||
/// - URL 구성
|
||||
/// - HTTP 메소드 설정
|
||||
/// - 헤더 설정
|
||||
/// - 요청 로깅
|
||||
/// - 응답 처리 및 역직렬화
|
||||
/// 이 메소드는 모든 성능 측정이 필요한 HTTP 요청의 공통 로직을 처리합니다:
|
||||
/// - 요청 처리 시간 측정
|
||||
/// - URL 구성
|
||||
/// - HTTP 메소드 설정
|
||||
/// - 헤더 설정
|
||||
/// - 요청 로깅
|
||||
/// - 응답 처리 및 역직렬화
|
||||
/// </remarks>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="body">요청 본문 (JSON 문자열)</param>
|
||||
/// <param name="methodString">HTTP 메소드 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간의 튜플</returns>
|
||||
/// <typeparam name="T">응답 데이터를 변환할 타입</typeparam>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="body">요청 본문 (JSON 문자열)</param>
|
||||
/// <param name="methodString">HTTP 메소드 문자열</param>
|
||||
/// <param name="header">추가할 헤더 정보</param>
|
||||
/// <param name="useAuth">인증 토큰 사용 여부</param>
|
||||
/// <returns>지정된 타입으로 변환된 응답 데이터와 요청 처리 시간의 튜플</returns>
|
||||
private static async UniTask<(T, TimeSpan)> RequestWithDuration<T>(string url, string body = null, string methodString = "", Dictionary<string, string> header = null, bool useAuth = true)
|
||||
{
|
||||
HTTPMethods method = StringToMethod(methodString);
|
||||
@@ -434,20 +434,20 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 원격 서버에서 파일을 다운로드합니다.
|
||||
/// 원격 서버에서 파일을 다운로드합니다.
|
||||
/// </summary>
|
||||
/// <param name="url">다운로드할 파일의 URL</param>
|
||||
/// <param name="savePath">파일을 저장할 로컬 경로</param>
|
||||
/// <param name="OnComplete">다운로드 완료시 호출될 콜백</param>
|
||||
/// <param name="OnProgress">다운로드 진행 상태 업데이트 콜백 (progress: 다운로드된 바이트 수, length: 전체 파일 크기)</param>
|
||||
/// <param name="OnError">오류 발생시 호출될 콜백</param>
|
||||
/// <returns>발행된 HTTP 요청 객체 (파일이 이미 존재하는 경우 null)</returns>
|
||||
/// <param name="url">다운로드할 파일의 URL</param>
|
||||
/// <param name="savePath">파일을 저장할 로컬 경로</param>
|
||||
/// <param name="OnComplete">다운로드 완료시 호출될 콜백</param>
|
||||
/// <param name="OnProgress">다운로드 진행 상태 업데이트 콜백 (progress: 다운로드된 바이트 수, length: 전체 파일 크기)</param>
|
||||
/// <param name="OnError">오류 발생시 호출될 콜백</param>
|
||||
/// <returns>발행된 HTTP 요청 객체 (파일이 이미 존재하는 경우 null)</returns>
|
||||
/// <remarks>
|
||||
/// 지정된 경로에 파일이 이미 존재하는 경우 다운로드를 수행하지 않고 바로 OnComplete 콜백을 호출합니다.
|
||||
/// 지정된 경로에 파일이 이미 존재하는 경우 다운로드를 수행하지 않고 바로 OnComplete 콜백을 호출합니다.
|
||||
/// </remarks>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 이미지 파일 다운로드 예제
|
||||
/// // 이미지 파일 다운로드 예제
|
||||
/// public void DownloadImage(string imageUrl, string fileName)
|
||||
/// {
|
||||
/// string savePath = Path.Combine(Application.persistentDataPath, fileName);
|
||||
@@ -456,15 +456,15 @@ namespace UVC.Network
|
||||
/// imageUrl,
|
||||
/// savePath,
|
||||
/// () => {
|
||||
/// Debug.Log($"이미지가 성공적으로 다운로드되었습니다: {savePath}");
|
||||
/// // 다운로드된 이미지 사용 코드...
|
||||
/// Debug.Log($"이미지가 성공적으로 다운로드되었습니다: {savePath}");
|
||||
/// // 다운로드된 이미지 사용 코드...
|
||||
/// },
|
||||
/// (progress, length) => {
|
||||
/// float percentage = (float)progress / length * 100f;
|
||||
/// Debug.Log($"다운로드 진행률: {percentage:F1}%");
|
||||
/// Debug.Log($"다운로드 진행률: {percentage:F1}%");
|
||||
/// },
|
||||
/// (error) => {
|
||||
/// Debug.LogError($"다운로드 실패: {error}");
|
||||
/// Debug.LogError($"다운로드 실패: {error}");
|
||||
/// }
|
||||
/// );
|
||||
/// }
|
||||
@@ -530,18 +530,18 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 다운로드 스트림을 처리하여 파일로 저장합니다.
|
||||
/// 다운로드 스트림을 처리하여 파일로 저장합니다.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 이 메소드는 스트림 데이터를 지정된 파일로 저장하며, 다운로드가 완료되거나 중단될 때까지 블로킹 방식으로 데이터를 처리합니다.
|
||||
/// 다운로드에 실패한 경우 (길이가 0인 경우) 빈 파일은 삭제됩니다.
|
||||
/// 이 메소드는 스트림 데이터를 지정된 파일로 저장하며, 다운로드가 완료되거나 중단될 때까지 블로킹 방식으로 데이터를 처리합니다.
|
||||
/// 다운로드에 실패한 경우 (길이가 0인 경우) 빈 파일은 삭제됩니다.
|
||||
/// </remarks>
|
||||
/// <param name="savePath">다운로드한 데이터를 저장할 파일 경로</param>
|
||||
/// <param name="blockingStream">다운로드 콘텐츠 스트림</param>
|
||||
/// <returns>저장된 파일의 크기(바이트)</returns>
|
||||
/// <param name="savePath">다운로드한 데이터를 저장할 파일 경로</param>
|
||||
/// <param name="blockingStream">다운로드 콘텐츠 스트림</param>
|
||||
/// <returns>저장된 파일의 크기(바이트)</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 내부적으로 Download 메소드에서 사용됩니다
|
||||
/// // 내부적으로 Download 메소드에서 사용됩니다
|
||||
/// long fileSize = await UniTask.RunOnThreadPool<long>(() =>
|
||||
/// ConsumeDownloadStream(savePath, downloadStream as BlockingDownloadContentStream));
|
||||
/// </code>
|
||||
@@ -583,15 +583,15 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// HTTP 메소드와 URL을 기반으로 적절한 HTTPRequest 객체를 생성합니다.
|
||||
/// HTTP 메소드와 URL을 기반으로 적절한 HTTPRequest 객체를 생성합니다.
|
||||
/// </summary>
|
||||
/// <param name="methods">요청에 사용할 HTTP 메소드</param>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="onRequest">요청 완료 시 호출될 콜백 (선택 사항)</param>
|
||||
/// <returns>생성된 HTTPRequest 객체</returns>
|
||||
/// <param name="methods">요청에 사용할 HTTP 메소드</param>
|
||||
/// <param name="url">요청할 URL</param>
|
||||
/// <param name="onRequest">요청 완료 시 호출될 콜백 (선택 사항)</param>
|
||||
/// <returns>생성된 HTTPRequest 객체</returns>
|
||||
/// <example>
|
||||
/// <code>
|
||||
/// // 내부 사용 예제 (직접 사용하지 않음)
|
||||
/// // 내부 사용 예제 (직접 사용하지 않음)
|
||||
/// HTTPRequest request = SelectHTTPRequest(HTTPMethods.Get, "https://api.example.com/data");
|
||||
/// request.SetHeader("Custom-Header", "HeaderValue");
|
||||
/// request.Send();
|
||||
@@ -615,11 +615,11 @@ namespace UVC.Network
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 문자열 형태의 HTTP 메소드를 Best.HTTP.HTTPMethods 열거형으로 변환합니다.
|
||||
/// 문자열 형태의 HTTP 메소드를 Best.HTTP.HTTPMethods 열거형으로 변환합니다.
|
||||
/// </summary>
|
||||
/// <param name="method">변환할 HTTP 메소드 문자열 ("get", "post" 등)</param>
|
||||
/// <returns>해당하는 HTTPMethods 열거형 값</returns>
|
||||
/// <exception cref="ArgumentException">지원하지 않는 HTTP 메소드인 경우 발생</exception>
|
||||
/// <param name="method">변환할 HTTP 메소드 문자열 ("get", "post" 등)</param>
|
||||
/// <returns>해당하는 HTTPMethods 열거형 값</returns>
|
||||
/// <exception cref="ArgumentException">지원하지 않는 HTTP 메소드인 경우 발생</exception>
|
||||
private static HTTPMethods StringToMethod(string method)
|
||||
{
|
||||
return method.ToLower() switch
|
||||
|
||||
51
Assets/Scripts/UVC/Network/HttpResponseModel.cs
Normal file
51
Assets/Scripts/UVC/Network/HttpResponseModel.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
#nullable enable
|
||||
|
||||
namespace UVC.Network
|
||||
{
|
||||
public enum APIState
|
||||
{
|
||||
Loaded, Loading, Error
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class HttpResponseModel<T>
|
||||
{
|
||||
public int code;
|
||||
public string message;
|
||||
public T? data;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"HttpResponseModel code:{code} message:{message} data:{data}";
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data로 한번 감싸진 response때문에
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
[System.Serializable]
|
||||
public class ResponseDataModel<T>
|
||||
{
|
||||
public T? data;
|
||||
}
|
||||
|
||||
public class EntityWithState<T>
|
||||
{
|
||||
private APIState state;
|
||||
public APIState State { get => state; }
|
||||
|
||||
private T? entity;
|
||||
public T? Entity { get => entity; }
|
||||
|
||||
private string? message;
|
||||
public string? Message { get => message; }
|
||||
|
||||
public EntityWithState(APIState state, T? entity, string? message = null)
|
||||
{
|
||||
this.state = state;
|
||||
this.entity = entity;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Scripts/UVC/Network/HttpResponseModel.cs.meta
Normal file
2
Assets/Scripts/UVC/Network/HttpResponseModel.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 942596c4ce2c4c9449479859f4117502
|
||||
Reference in New Issue
Block a user