클라이언트 스크립트

Chain2D.Connection

서버와의 연결이 붙어 있는지, 끊겼는지, 다시 이을지. 끊김은 단계가 아닙니다 — 단계는 오르기만 하고, 연결이 끊겼다고 로그인이나 내려받기가 없던 일이 되지는 않습니다. 세션도 파일도 그대로입니다. 되감기로 다루면 방금까지 되던 호출이 실패하기 시작하고, 창작자가 쓴 어떤 것도 그것을 설명하지 못합니다. 그래서 단계와는 별개의 축으로 둡니다.

Connection.connected

선언
Chain2D.Connection.connected() -> boolean
반환

boolean붙어 있으면 `true`, 아니면 `false`.

지금 연결이 붙어 있는지 묻습니다. 끊기면 `false` 가 되지만 `Chain2D.stage()` 는 그대로입니다 — 끊김은 단계가 아니므로 이 둘을 따로 봐야 합니다.

if not Chain2D.Connection.connected() then
    print("연결이 끊긴 상태입니다")
end

Connection.onLost

선언
Chain2D.Connection.onLost(handler: (reason: string) -> ())
매개변수
handler(reason: string) -> ()연결이 끊겼을 때 불립니다. 인자는 끊긴 이유입니다. 함수가 아니면 오류가 납니다.

연결이 끊겼다는 것을 듣습니다. 단계가 되감기지 않으므로, 끊겼다는 사실은 이 handler 로만 옵니다. 여러 번 부르면 여럿이 걸리고 등록한 순서대로 모두 불립니다 — 로비와 게임 화면은 한 VM 에서 도는 두 스크립트이고, 한 자리만 두면 나중 등록이 앞의 것을 조용히 지웁니다. 로비의 재접속 화면이 바로 그렇게 사라진 적이 있습니다. 핸들러가 오류를 내면 스크립트가 꺼지고 그 뒤의 핸들러는 불리지 않습니다.

Chain2D.Connection.onLost(function(reason)
    print("끊겼습니다: " .. reason)
    local ok, why = Chain2D.Connection.retry()
    if not ok then
        print(why)
    end
end)

Connection.retry

선언
Chain2D.Connection.retry() -> (boolean, string?)
반환

(boolean, string?)다시 잇기를 시작했으면 `true`. 시작하지 못했으면 `false` 와 이유가 함께 옵니다. `true` 는 시작했다는 뜻이지 이미 붙었다는 뜻이 아닙니다 — 붙었는지는 `Connection.connected()` 로 확인하고, 다시 끊기면 `Connection.onLost` 로 옵니다.

연결을 다시 잇습니다. 거부는 오류가 아니라 값으로 옵니다 — "다시 시도" 버튼은 흔히 눌리는 것이고, 누른 쪽에는 어떤 답에도 보여줄 화면이 있습니다. 다시 잇기를 붙이지 않은 빌드에서 부르면 이때만은 값 대신 `this build cannot reconnect` 오류가 납니다.

local ok, why = Chain2D.Connection.retry()
if not ok then
    print("다시 잇지 못했습니다: " .. why)
end