3
-behaviour(gen_server).
6
-export([init/1, handle_call/3, handle_info/2, code_change/3]).
8
-record(state, {port, data}).
10
get_data() -> gen_server:call(portc, get_data).
13
PortProg = code:priv_dir(foo) ++ "/bin/portc",
14
Port = open_port({spawn, PortProg}, [binary, {packet, 2}]),
15
{ok, #state{port = Port}}.
17
handle_call(get_data, _From, State) ->
18
{reply, {ok, State#state.data}, State}.
20
handle_info({Port, Cmd}, State) ->
21
NewState = do_cmd(Cmd, State),
24
code_change(_, State, change_port_only) ->
25
State#state.port ! close,
27
{Port, closed} -> true
29
NPortProg = code:priv_dir(foo) ++ "/bin/portc", % get new version
30
NPort = open_port({spawn, NPortProg}, [binary, {packet, 2}]),
31
{ok, State#state{port = NPort}};
32
code_change(1, State, change_erl_only) ->
33
NState = transform_state(State),