Current section

Files

Jump to
chat src services chat_file.erl
Raw

src/services/chat_file.erl

-module(chat_file).
-include_lib("chat/include/roster.hrl").
-include_lib("n2o/include/n2o.hrl").
-include_lib("kernel/include/file.hrl").
-export([start/0,info/3, proc/2]).
start() -> n2o_pi:start(#pi{module = ?MODULE, table = system, sup = roster, name = <<"File Service">>, state = []}).
info(#ftp{status = {event, _}} = FTP, Req, State) -> {reply, {bert, #ftp{}}, Req, State};
info(#ftp{id = Link, status = <<"init">>, block = Block, offset = Offset} = FTP, Req, State) -> {reply, {bert, #ftp{}}, Req, State};
info(#ftp{id = Link, status = <<"send">>} = FTP, Req, State) -> {reply, {bert, #ftp{}}, Req, State};
info(Message, Req, State) -> {unknown, Message, Req, State}.
proc(init, #pi{state = #ftp{sid = Sid, meta = ClientId} = FTP} = Async) -> {ok, Async};
proc(#ftp{id=L, sid=S, data=D, status= <<"send">>, block=B,meta=C}=FTP, #pi{state=#ftp{size=TS,offset=O,filename=F}}=Async) when O+B >= TS -> {stop, normal, FTP, Async#pi{state = FTP}};
proc(#ftp{data=Data, block=B} = FTP, #pi{state = #ftp{offset=O, filename=F}} = Async) -> {reply, FTP#ftp{data = <<>>}, Async#pi{state = FTP#ftp{filename = F}}};
proc(_, Async) -> {reply, #ftpack{}, Async}.