diff options
author | Ulf Wiger <ulf@feuerlabs.com> | 2015-08-20 16:28:49 +0200 |
---|---|---|
committer | Ulf Wiger <ulf@feuerlabs.com> | 2015-11-20 13:41:50 -0800 |
commit | 45ddf112263c1cf583f04ec658f6b141ec3d0b00 (patch) | |
tree | 44f9e548c7c85ca6b206f870b0990a82351d2871 /src | |
parent | b5cf44194c21241d2b16ac11857ef65f7cb34bdd (diff) | |
download | rvi_core-45ddf112263c1cf583f04ec658f6b141ec3d0b00.tar.gz |
ensure no trailing ws in cert files
Diffstat (limited to 'src')
-rw-r--r-- | src/rvi_server.erl | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/rvi_server.erl b/src/rvi_server.erl new file mode 100644 index 0000000..6aa0d8c --- /dev/null +++ b/src/rvi_server.erl @@ -0,0 +1,80 @@ +-module(rvi_server). +-behaviour(gen_server). + +-export([start_link/0, + await/0, + info/0, + info/1]). + +%% gen_server callbacks +-export([init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + terminate/2, + code_change/3]). + +-include_lib("lager/include/log.hrl"). + +-record(st, {wait_for = [], + ready = []}). + +start_link() -> + gen_server:start_link({local,?MODULE}, ?MODULE, [], [{debug,[trace]}]). + +init([]) -> + WaitFor = lists:flatmap( + fun({_, Names}) -> + Names + end, setup:find_env_vars(rvi_core_await)), + {ok, #st{wait_for = WaitFor}}. + +await() -> + call(await). + +info() -> + call(info). + +info(waiting) -> call(waiting); +info(ready ) -> call(ready); +info(_) -> + undefined. + +handle_call(ready, _From, #st{ready = Ready} = S) -> + {reply, Ready, S}; +handle_call(waiting, _From, #st{wait_for = WF} = S) -> + {reply, WF, S}; +handle_call(info, _From, #st{ready = Ready, + wait_for = WF} = S) -> + {reply, [{ready, Ready}, + {waiting_for, WF}], S}; +handle_call(await, _From, #st{wait_for = WF} = S) -> + [gproc:nb_wait(Name) || Name <- WF], + {reply, ok, S}; +handle_call(_, _, S) -> + {reply, error, S}. + +handle_cast(_, S) -> + {noreply, S}. + +handle_info({gproc, _, registered, {Key, _, _}}, #st{wait_for = WF, + ready = Ready} = S) -> + WF1 = WF -- [Key], + if WF1 == [] andalso WF =/= [] -> + rvi_common:announce({n, l, rvi_core}); + true -> + ok + end, + {noreply, S#st{ready = [Key | Ready], wait_for = WF1}}; +handle_info(_, S) -> + {noreply, S}. + +terminate(_Reason, _State) -> + ok. + +code_change(_FromVsn, S, _Extra) -> + {ok, S}. + + +call(Req) -> + gen_server:call(?MODULE, Req). |