http_get_file 함수 설명 및 활용 예제
함수 개요
http_get_file
함수는 지정된 URL에 연결하여 파일 형태로 정보를 가져오는 비동기 함수입니다. 이 함수는 응답을 기다리는 동안 GameMaker가 멈추지 않고 계속 실행됩니다. 응답 정보는 문자열 형태로 제공되며, 이는 객체 이벤트에 정의된 비동기 HTTP 이벤트를 트리거합니다.
비동기 콜백
이 이벤트는 "콜백"을 생성하며, 이는 모든 HTTP 이벤트에서 수신됩니다. 이 경우, 이벤트에 독점적인 DS 맵(일반적으로 "사전"이라고 알려짐)이 생성되어 특별한 변수 async_load
에 저장됩니다. 이 DS 맵은 반환되는 데이터에 따라 다양한 값을 포함합니다. 즉, 데이터 패킷이 수신될 때마다 이벤트가 여러 번 트리거되어 진행률 표시줄을 표시할 수 있습니다.
문법
http_get_file(url, local_target);
인수 설명
인수 | 유형 | 설명 |
---|---|---|
url | String | 파일을 가져올 서버의 웹 주소입니다. |
local_target | String | 파일을 저장할 로컬 경로입니다. |
반환값
- Async Request ID (문제가 발생하면 -1)
예제
http_get_file
함수는 어떤 이벤트에서든 호출할 수 있으며, 비동기적이기 때문에 콜백은 거의 즉시 발생할 수도 있고 몇 초가 걸릴 수도 있습니다. 함수 호출은 간단하며 다음과 같이 작성할 수 있습니다:
request_id = http_get_file("http://www.macsweeneygames.com/downloads/upgrade.zip", "\Downloads\Upgrade.zip");
위 코드는 주어진 URL에서 파일을 요청하고, 로컬 저장소의 "Downloads" 디렉토리에 지정된 파일 이름으로 다운로드하도록 설정합니다. 이때, async_load
맵의 "id"는 변수 request_id
에 저장되어 비동기 이벤트에서 올바른 콜백을 확인할 수 있습니다. 저장 디렉토리가 존재하지 않으면 생성됩니다.
비동기 이벤트 예제
비동기 이벤트가 트리거되면 다음과 같은 코드를 사용할 수 있습니다:
if (async_load[? "id"] == request_id) {
var _status = async_load[? "status"];
if (_status == 0) {
var _path = async_load[? "result"];
var _files = zip_unzip(_path, "/NewContent/");
if (_files > 0) {
global.extra_content = true;
}
}
}
위 코드는 요청의 "id"를 확인한 후 요청의 상태를 체크합니다. 값이 0(완료 신호)인 경우 결과를 사용하여 zip_unzip
함수를 통해 다운로드한 파일을 지정된 디렉토리에 압축 해제합니다. 압축 해제가 성공하면 전역 변수가 true
로 설정됩니다.
활용 예제
- 파일 다운로드 및 진행률 표시
request_id = http_get_file("http://example.com/file.zip", "\Downloads\file.zip");
- 다운로드 완료 후 알림
if (async_load[? "status"] == 0) { show_message("다운로드가 완료되었습니다!"); }
- 여러 파일 다운로드
request_id1 = http_get_file("http://example.com/file1.zip", "\Downloads\file1.zip"); request_id2 = http_get_file("http://example.com/file2.zip", "\Downloads\file2.zip");
- 다운로드 실패 처리
if (async_load[? "status"] != 0) { show_message("다운로드 실패: " + string(async_load[? "status"])); }
- 압축 해제 후 파일 사용
var _files = zip_unzip(_path, "/UnzippedContent/"); if (_files > 0) { // 압축 해제된 파일 사용 }