summaryrefslogtreecommitdiff
path: root/tcpserv.erl
diff options
context:
space:
mode:
Diffstat (limited to 'tcpserv.erl')
-rw-r--r--tcpserv.erl51
1 files changed, 21 insertions, 30 deletions
diff --git a/tcpserv.erl b/tcpserv.erl
index 808bcba..d76dcb8 100644
--- a/tcpserv.erl
+++ b/tcpserv.erl
@@ -13,62 +13,54 @@
-compile([debug_info,export_all]).
--define(TCP_OPTIONS,[list, {packet, 1}, {active, false}]).
+-define(TCP_OPTIONS,[list, {packet, 1}, {active, true}]).
-define(DLYTIME,1000).
%% API
%%-export([]).
lsockinit() -> ok.
-do_send(Sock,Pid,From) ->
+do_loop(Sock,Pid,N) ->
receive
- {From,exiting} -> ok;
- {Pid,shutdown} ->
- gen_tcp:close(Sock),
+ {tcp,Sock,Data} ->
+ io:format("~p:\n ~p\n",[N,Data]),
+ manip_msg(Pid,Data),
+ do_loop(Sock,Pid,N+1);
+ {tcp_closed,Sock} ->
ok;
+ {Pid,shutdown} ->
+ gen_tcp:close(Sock);
{_PPid,comm,Msg} ->
gen_tcp:send(Sock,Msg),
- do_send(Sock,Pid,From)
- end.
-
-do_recv(Sock,Pid,To,Cnt) ->
- case gen_tcp:recv(Sock,0) of
- {ok, B} ->
- io:format("~p:\n ~p\n",[Cnt,B]),
- manip_msg(Pid,To,B),
- %% devicemon ! {self(),comm,Msg},
- do_recv(Sock,Pid,To,Cnt+1);
- {error, closed} ->
- ok
+ do_loop(Sock,Pid,N)
end.
%% Message manipulation & dispatch routine
-manip_msg(Pid,To,[0,0,Addr,MsgReq,MsgRes|Name]) ->
+manip_msg(_Pid,[0,0,Addr,MsgReq,MsgRes|Name]) ->
%% Operation command dispatch -> Complex(devicemon + Message handler)
- cmdiface:reg_feedbackOps(Addr,Name,?DLYTIME,[MsgReq],[MsgRes],To);
-manip_msg(Pid,To,[0|Tail]) ->
+ cmdiface:reg_feedbackOps(Addr,Name,?DLYTIME,[MsgReq],[MsgRes],self());
+manip_msg(_Pid,[0|Tail]) ->
%% Seperation from the next part
- devicemon ! {To,comm,[0|Tail]};
-manip_msg(Pid,To,[Addr,Cmd|Name]) when Addr<10 ->
+ devicemon ! {self(),comm,[0|Tail]};
+manip_msg(_Pid,[Addr,Cmd|Name]) when Addr<10 ->
%% Seperation from the next part
cmdiface:invoke_cmd(Addr,Name,[Cmd]);
-manip_msg(Pid,To,Msg) -> % This needs improvements
+manip_msg(Pid,Msg) -> % This needs improvements
%% Fallback -> WTF
Pid ! {self(),comm,Msg}.
createsock(Sock,Pid) ->
- To=spawn(?MODULE,do_send,[Sock,Pid,self()]),
- Pid ! {self(),create,To},
- ok = do_recv(Sock,Pid,To,0),
- To ! Pid ! {self(),exiting}.
+ Pid ! {self(),create,self()},
+ ok = do_loop(Sock,Pid,0),
+ Pid ! {self(),exiting}.
listenport(LSock,Pid) ->
{ok,Sock} = gen_tcp:accept(LSock),
- spawn(?MODULE,createsock,[Sock,Pid]),
+ gen_tcp:controlling_process(Sock,spawn(?MODULE,createsock,[Sock,Pid])),
listenport(LSock,Pid).
portlistener(Port,Pid) ->
- {ok, LSock} = gen_tcp:listen(Port, [list, {packet, 1}, {active, false}]),
+ {ok, LSock} = gen_tcp:listen(Port, ?TCP_OPTIONS),
listenport(LSock,Pid).
@@ -94,7 +86,6 @@ tcpmon(Port) ->
start(Port) ->
spawn(?MODULE,tcpmon,[Port]).
-
trap() -> trap().
test() ->