Added new 'root' supervisor, and mnesia as child to this supervisor
This commit is contained in:
parent
3d8b413a8f
commit
3285bb9a7e
6 changed files with 110 additions and 6 deletions
|
@ -3,8 +3,7 @@
|
||||||
{vsn, "0.1.0"},
|
{vsn, "0.1.0"},
|
||||||
{modules, [
|
{modules, [
|
||||||
ggs_app,
|
ggs_app,
|
||||||
ggs_sup,
|
ggs_sup
|
||||||
ggs_server
|
|
||||||
]},
|
]},
|
||||||
{registered, [ggs_sup]},
|
{registered, [ggs_sup]},
|
||||||
{applications, [kernel, stdlib]},
|
{applications, [kernel, stdlib]},
|
||||||
|
|
63
src/ggs_mnesia_controller_server.erl
Normal file
63
src/ggs_mnesia_controller_server.erl
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
-module(ggs_mnesia_controller_server).
|
||||||
|
-behaviour(gen_server).
|
||||||
|
|
||||||
|
%% API
|
||||||
|
-export([start_link/0,
|
||||||
|
stop/0
|
||||||
|
]).
|
||||||
|
|
||||||
|
%% gen_server callbacks
|
||||||
|
-export([init/1, handle_call/3, handle_cast/2,
|
||||||
|
handle_info/2, terminate/2, code_change/3]).
|
||||||
|
|
||||||
|
|
||||||
|
-define(SERVER, ?MODULE).
|
||||||
|
|
||||||
|
-record(state, {}).
|
||||||
|
|
||||||
|
%%%====================================================
|
||||||
|
%%% API
|
||||||
|
%%%====================================================
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% @doc Starts the server
|
||||||
|
%% @end
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
start_link() ->
|
||||||
|
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% @doc Stops the server.
|
||||||
|
%% @spec stop() -> ok
|
||||||
|
%% @end
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
stop() ->
|
||||||
|
gen_server:cast(?SERVER, stop).
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% gen_server callbacks
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
|
||||||
|
init([]) ->
|
||||||
|
mnesia:create_schema([node()]),
|
||||||
|
mnesia:start(),
|
||||||
|
{ok, {}, 0}.
|
||||||
|
|
||||||
|
handle_cast(a, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
handle_call({getValue, Key},_From,State) ->
|
||||||
|
{reply,value_of_key_requested_goes_here, State}.
|
||||||
|
|
||||||
|
handle_info(timeout, State) ->
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
terminate(_Reason, _State) ->
|
||||||
|
ok.
|
||||||
|
|
||||||
|
code_change(_OldVsn, State, _Extra) ->
|
||||||
|
{ok, State}.
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Internal functions
|
||||||
|
%%-----------------------------------------------------
|
|
@ -109,6 +109,7 @@ do_JSCall(Socket, Data, State) ->
|
||||||
{hello} ->
|
{hello} ->
|
||||||
Client = getRef(),
|
Client = getRef(),
|
||||||
send(Socket, Client, "__ok_hello"),
|
send(Socket, Client, "__ok_hello"),
|
||||||
|
%gen_server:call(ggs_mnesia_controller_server, {hello, "Someone said hello!"}),
|
||||||
{Client, JSVM};
|
{Client, JSVM};
|
||||||
{echo, RefID, _, MSG} ->
|
{echo, RefID, _, MSG} ->
|
||||||
send(Socket, RefID, "Your VM is ", getJSVM(RefID, State)),
|
send(Socket, RefID, "Your VM is ", getJSVM(RefID, State)),
|
||||||
|
|
41
src/ggs_server_sup.erl
Normal file
41
src/ggs_server_sup.erl
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
-module(ggs_server_sup).
|
||||||
|
-behaviour(supervisor).
|
||||||
|
|
||||||
|
%% API
|
||||||
|
-export([start/1, start_link/1]).
|
||||||
|
|
||||||
|
%% Supervisor callbacks
|
||||||
|
-export([init/1]).
|
||||||
|
-define(SERVER, ?MODULE).
|
||||||
|
|
||||||
|
start(Port) ->
|
||||||
|
[FirstArg] = Port,
|
||||||
|
{IntPort, _} = string:to_integer(FirstArg),
|
||||||
|
start_link(IntPort).
|
||||||
|
|
||||||
|
start_link(Port) ->
|
||||||
|
supervisor:start_link({local, ?SERVER}, ?MODULE, [Port]).
|
||||||
|
|
||||||
|
init([Port]) ->
|
||||||
|
GGSServer = {ggs_server,
|
||||||
|
{ggs_server, start_link, [Port]},
|
||||||
|
permanent,
|
||||||
|
2000,
|
||||||
|
worker,
|
||||||
|
[ggs_server]
|
||||||
|
},
|
||||||
|
MnesiaServer = {ggs_mnesia_controller_server,
|
||||||
|
{ggs_mnesia_controller_server, start_link, []},
|
||||||
|
permanent,
|
||||||
|
2000,
|
||||||
|
worker,
|
||||||
|
[ggs_mnesia_controller_server]
|
||||||
|
},
|
||||||
|
Children = [MnesiaServer, GGSServer],
|
||||||
|
|
||||||
|
RestartStrategy = { one_for_one, % Restart only crashing child
|
||||||
|
10, % Allow ten crashes per..
|
||||||
|
1 % 1 second, then crash supervisor.
|
||||||
|
},
|
||||||
|
{ok, {RestartStrategy, Children}}.
|
||||||
|
|
|
@ -17,12 +17,12 @@ start_link(Port) ->
|
||||||
supervisor:start_link({local, ?SERVER}, ?MODULE, [Port]).
|
supervisor:start_link({local, ?SERVER}, ?MODULE, [Port]).
|
||||||
|
|
||||||
init([Port]) ->
|
init([Port]) ->
|
||||||
Server = {ggs_server,
|
Server = {ggs_server_sup,
|
||||||
{ggs_server, start_link, [Port]},
|
{ggs_server_sup, start_link, [Port]},
|
||||||
permanent,
|
permanent,
|
||||||
2000,
|
2000,
|
||||||
worker,
|
worker,
|
||||||
[ggs_server]
|
[ggs_server_sup]
|
||||||
},
|
},
|
||||||
Children = [Server],
|
Children = [Server],
|
||||||
|
|
||||||
|
|
2
start
2
start
|
@ -1,3 +1,3 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
erl -boot start_sasl -pa erlang_js/ebin/ -pa ebin -pa src -s start_ggs
|
erl -mnesia -boot start_sasl -pa erlang_js/ebin/ -pa ebin -pa src -s start_ggs
|
||||||
|
|
Reference in a new issue