view server/awetv/src/aweconn.erl @ 0:db5c7047ef0e default tip

Initial commit
author Mike Pavone <pavone@retrodev.com>
date Fri, 21 Jun 2013 22:09:34 -0700
parents
children
line wrap: on
line source

-module(aweconn).
-behavior(gen_server).

-export([start/1, init/1, handle_call/3, handle_cast/2, handle_info/2]).

start(Socket) ->
	{ok, Pid} = gen_server:start(?MODULE, [], []),
	set_socket(Pid, Socket).

set_socket(Pid, Socket) ->
	ok = gen_tcp:controlling_process(Socket, Pid),
	gen_server:cast(Pid, {set_socket, Socket}).

init(_Args) ->
	io:format("aweconn starting~n"),
	{ok, no_sock}.

handle_call(_Msg, _From, State) ->
	{noreply, State}.

handle_cast({set_socket, NewSocket}, Socket) ->
	io:format("aweconn got socket~n"),
	inet:setopts(NewSocket, [{active, true}]),
	State = case Socket of
		no_sock -> NewSocket;
		Old -> gen_tcp:close(Old), NewSocket
	end,
	{noreply, State};

handle_cast(_, State) ->
	{noreply, State}.

handle_info({tcp, Socket, Data}, State) ->
	io:format("Received: ~p~n", [Data]),
	gen_tcp:send(Socket, Data),
	{noreply, State};
handle_info(_Msg, State) ->
	{noreply, State}.