class

OyasumiVR::Repository

Inherits Sleep::Signal < Reference < Object

OyasumiVR の睡眠モードを追いかける(issue #54)。

見つけるまでは一定間隔で探し、見つけた後は設定の間隔で睡眠モードを読む。 読み取りが続けて失敗したら見失ったものとして、探すところからやり直す。 OyasumiVR はサーバのポートを起動のたびに変えるため、再起動されると古いポートには誰もいない。

探すのも読むのも別のファイバで行い、tick と state は待たずに戻る。

Constants

DISCOVERY_INTERVAL = 30.seconds

見つからない間に探し直す間隔。監視対象の再試行と揃える。

MAX_FAILURES = 2

見失ったと判断するまでの、続けての失敗の回数。 1 回で判断すると、OyasumiVR が一瞬応えなかっただけで睡眠中の停止が解ける。

Constructors

new(client : Client, runner : Proc(Proc(Nil), Nil) = ->(work : Proc(Nil)) do spawn(name: "oyasumivr") do work.call end nil end, clock : Proc(Time::Span) = -> do Time.monotonic end)

仕事をファイバへ渡す方法と、単調時計。テストでは同期で走らせ、時刻を固定する。

Source

Instance methods

configure(enabled : Bool, interval : Time::Span) : Nil

設定を反映する。使うかどうかが変わったときは、探すところからやり直す。

間隔を縮めたときは、次に読む時刻も新しい間隔に合わせて早める。 旧い間隔で決めた時刻のままだと、60 秒から 1 秒へ縮めても 60 秒近く読まない。

Source
enabled?
Source
port
Source
state
Source
status
Source
tick

主ループから毎周期呼ぶ。時刻が来ていれば、探すか読むかを 1 回投げる。

Source