aboutsummaryrefslogtreecommitdiff
path: root/src/xml_stream.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/xml_stream.erl')
-rw-r--r--src/xml_stream.erl14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/xml_stream.erl b/src/xml_stream.erl
index 4d7f80d4c..69b6123c0 100644
--- a/src/xml_stream.erl
+++ b/src/xml_stream.erl
@@ -10,7 +10,7 @@
-author('alexey@sevcom.net').
-vsn('$Revision$ ').
--export([start/1, init/1, send_text/2]).
+-export([start/1, start/2, init/1, init/2, send_text/2]).
-define(XML_START, 0).
-define(XML_END, 1).
@@ -20,10 +20,18 @@
start(CallbackPid) ->
spawn(?MODULE, init, [CallbackPid]).
+start(Receiver, CallbackPid) ->
+ spawn(?MODULE, init, [Receiver, CallbackPid]).
+
init(CallbackPid) ->
Port = open_port({spawn, expat_erl}, [binary]),
loop(CallbackPid, Port, []).
+init(Receiver, CallbackPid) ->
+ erlang:monitor(process, Receiver),
+ Port = open_port({spawn, expat_erl}, [binary]),
+ loop(CallbackPid, Port, []).
+
loop(CallbackPid, Port, Stack) ->
receive
{Port, {data, Bin}} ->
@@ -31,7 +39,9 @@ loop(CallbackPid, Port, Stack) ->
loop(CallbackPid, Port, process_data(CallbackPid, Stack, Data));
{_From, {send, Str}} ->
Port ! {self(), {command, Str}},
- loop(CallbackPid, Port, Stack)
+ loop(CallbackPid, Port, Stack);
+ {'DOWN', _Ref, _Type, _Object, _Info} ->
+ ok
end.
process_data(CallbackPid, Stack, Data) ->