목차

이전 항목

배포판 만들기

다음 항목

안드로이드

링크


원문 보러 가기
오역 신고하기
Created using Sphinx.

웹 업데이터

렌파이에는 웹사이트에 올라온 렌파이 게임을 자동으로 다운로드하여 업데이트 파일을 설치할 수 있는 업데이터 기능이 있습니다. 이를 이용하여 용량이 큰 게임을 최신 버전으로 쉽게 유지할 수 있습니다.

렌파이 업데이터는 아래에 나와있는 작업을 자동으로 수행하여 작동합니다.:

  1. 업데이트 내역을 관리하는 인덱스 파일을 다운로드한다.
  2. 사용자에게 업데이트를 할지 묻는다.
  3. 하드에 있는 파일로 아카이브 파일을 만든다.
  4. 서버에서 zsync 제어 파일을 다운로드한다.
  5. zsync툴을 이용하여 서버에 있는 버전으로 아카이브 파일을
교체한다. zsync 는 두 아카이브 파일에서 다른점을 자동으로 계산한 다음, 변경된 부분만 다운로드한다.
  1. 아카이브를 압축해재하여 하드에 있는 파일과 교체한다.
  2. 이전 버전과 비교해서 새 버전 게임에서는 제거된 파일을
지운다.
  1. 게임을 재시작한다.

이 과정에서 렌파이 업데이터는 업데이터 스크린을 띄우므로 사용자는 업데이트 과정을 지켜보거나 취소할 수도 있습니다.

서버 요구사항

업데이트를 사용하려면 제작자가 호스팅을 마련해야 합니다. URL에서 직접 업데이트 파일을 다운로드할 수 있어야 하며, 서버는 반드시 HTTP 범위 쿼리를 지원해야 합니다.

(파일 공유 사이트로는 이 기능을 이용할 수 없으므로 유료 웹 호스팅을 이용해야한다는 의미입니다.)

업데이트 파일 작성하기

업데이트 파일은 배포판을 만들 때 자동으로 만들어집니다. 업데이트 파일을 만드려면 options.rpy에서 build.include_updates 를 True로 설정하시기 바랍니다. 이렇게 설정하면 런처에서 "Build Updates" 옵션을 사용할 수 있게 됩니다. Build Updates 옵션에 체크를 하면 렌파이는 업데이트 파일을 생성합니다.

업데이트 파일은 다음과 같이 구성되어있습니다:

updates.json
업데이트 할 수 있는 파일 목록과 각 파일의 버전.
package.sums
패키지에 있는 각 블록의 검사합이 적혀있다.
package.update.gz
패키지의 업데이트 날짜가 적혀있다.
package.update.json
패키지에 들어있는 파일 목록이 적혀있다. 업데이터가 DLC를 다운로드 할 때 사용한다.
package.zsync
zsync가 다운로드 과정을 처리할 때 사용하는 제어 파일이다.

이 파일들은 전부 웹서버의 동일한 디렉토리에 올려야합니다.

함수

업데이트 기능을 실행하기 위해서는 updater.update 나 updater.Update 액션을 사용해야 합니다.

updater.Update(*args, **kwargs)

updater.update() 함수를 호출하는 액션. 인수는 전부 이 함수에 저장하고 전달한다.

updater.UpdateVersion(url, check_interval=21600, simulate=None, **kwargs)

이 함수는 url 에 있는 서버와 접촉해 지정한 주소에서 신규 버전의 소프트웨어가 존재하는지를 판단한다. 신규 버전이 존재한다면 이 함수는 새 버전을 반환한다. 그 외에는 None을 반환한다.

서버에 접촉하는 것이 시간을 다소 소요할 수 있기 때문에 이 함수는 백그라운드에 쓰레드를 실행하고, 마지막으로 서버와 접촉했을 때 얻은 버전을 반환하거나, 서버에 접촉한 적이 없다면 None을 반환한다. 서버에 접촉되었다면 백그라운드 쓰레드는 현재 인터렉션을 재시작해 이 함수를 호출하는 스크린을 갱신시킨다.

각 rul은 렌파이 세션 당 한 번 접촉될 것이며, check_interval 에 지정한 시간 당 한 번 이상은 접촉하지 않을 것이다. 서버에 접촉할 수 없다면 캐시된 데이터를 반환할 것이다.

(simulate`를 비롯한) 추가 키워드 인수는 :func:`updater.update 에 값이 지정되어 있다면 업데이트 매커니즘에 전달될 것이다.

updater.can_update(base=None)

성공적으로 업데이트할 수 있다면 참을 반환한다. 업데이트가 불가능하다면 거짓을 반환한다. (예를 들어, 업데이트 경로가 삭제되었거나 하는 경우 등.)

업데이트가 실제로 가능한가를 판단하는 함수가 아니라는 점을 기억해야 한다. 업데이트 가능 여부는 updater.UpdateVersion() 을 사용해 판별해야 한다.

updater.get_installed_packages(base=None)

설치된 DLC 패키지 이름을 반환한다.

base
업데이트할 기본 디렉토리. 기본값은 현재 프로젝트의 기본 디렉토리이다.
updater.update(url, base=None, force=False, public_key=None, simulate=None, add=[], restart=True)

렌파이 게임을 최신 버전으로 업데이트한다.

url
updates.json 파일의 URL.
base
업데이트 될 기본 디렉토리. 기본값은 현재 게임의 기본 디렉토리이다. (보통은 무시해도 된다.)
force
버전이 같아도 업데이트를 하도록 한다. (업데이터 테스트용으로 사용된다.)
public_key
업데이트 서명이 대조하는 퍼블릭 키가 들어있는 PEM 파일의 경로. (보통은 무시해도 된다.)
simulate

실제로 업데이트를 수행하지 않고 업데이트 GUI 테스트에 사용된다. :

  • None을 적으면 업데이트를 수행한다.
  • "available" 을 적으면 업데이트할 수 있는 상태의 GUI를 테스트한다.
  • "not_available" 을 적으면 업데이트할 수 없는 상태의 GUI를 테스트한다.
  • "error"을 적으면 업데이트 에러 상황을 테스트한다.
add
업데이트에 추가할 패키지 리스트. DLC를 사용하는 경우에만 필요하다.
restart
업데이트를 한 뒤 게임을 재시작한다.

스크린

업데이터 인터페이스를 바꾸려면 updater 스크린을 재작성해야합니다. 기본 updater 스크린은 common/00updater.rpy 에 정의되어있습니다.