From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- system/doc/tutorial/complex2.erl | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 system/doc/tutorial/complex2.erl (limited to 'system/doc/tutorial/complex2.erl') diff --git a/system/doc/tutorial/complex2.erl b/system/doc/tutorial/complex2.erl new file mode 100644 index 0000000000..93d00dab6b --- /dev/null +++ b/system/doc/tutorial/complex2.erl @@ -0,0 +1,45 @@ +-module(complex2). +-export([start/1, stop/0, init/1]). +-export([foo/1, bar/1]). + +start(ExtPrg) -> + spawn(?MODULE, init, [ExtPrg]). +stop() -> + complex ! stop. + +foo(X) -> + call_port({foo, X}). +bar(Y) -> + call_port({bar, Y}). + +call_port(Msg) -> + complex ! {call, self(), Msg}, + receive + {complex, Result} -> + Result + end. + +init(ExtPrg) -> + register(complex, self()), + process_flag(trap_exit, true), + Port = open_port({spawn, ExtPrg}, [{packet, 2}, binary]), + loop(Port). + +loop(Port) -> + receive + {call, Caller, Msg} -> + Port ! {self(), {command, term_to_binary(Msg)}}, + receive + {Port, {data, Data}} -> + Caller ! {complex, binary_to_term(Data)} + end, + loop(Port); + stop -> + Port ! {self(), close}, + receive + {Port, closed} -> + exit(normal) + end; + {'EXIT', Port, Reason} -> + exit(port_terminated) + end. -- cgit v1.2.3