Added new 'root' supervisor, and mnesia as child to this supervisor

This commit is contained in:
Jonatan Pålsson 2011-02-02 19:09:44 +01:00
parent 3d8b413a8f
commit 3285bb9a7e
6 changed files with 110 additions and 6 deletions

View file

@ -3,8 +3,7 @@
{vsn, "0.1.0"},
{modules, [
ggs_app,
ggs_sup,
ggs_server
ggs_sup
]},
{registered, [ggs_sup]},
{applications, [kernel, stdlib]},

View 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
%%-----------------------------------------------------

View file

@ -109,6 +109,7 @@ do_JSCall(Socket, Data, State) ->
{hello} ->
Client = getRef(),
send(Socket, Client, "__ok_hello"),
%gen_server:call(ggs_mnesia_controller_server, {hello, "Someone said hello!"}),
{Client, JSVM};
{echo, RefID, _, MSG} ->
send(Socket, RefID, "Your VM is ", getJSVM(RefID, State)),

41
src/ggs_server_sup.erl Normal file
View 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}}.

View file

@ -17,12 +17,12 @@ start_link(Port) ->
supervisor:start_link({local, ?SERVER}, ?MODULE, [Port]).
init([Port]) ->
Server = {ggs_server,
{ggs_server, start_link, [Port]},
Server = {ggs_server_sup,
{ggs_server_sup, start_link, [Port]},
permanent,
2000,
worker,
[ggs_server]
[ggs_server_sup]
},
Children = [Server],

2
start
View file

@ -1,3 +1,3 @@
#!/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