|
|
@ -31,9 +31,7 @@ stop(Pid) -> |
|
|
|
gen_srv:stop(Pid). |
|
|
|
|
|
|
|
init([Port, BaseFilename]) -> |
|
|
|
%% Store all messages off the heap to avoid unnecessary GC. |
|
|
|
process_flag(message_queue_data, off_heap), |
|
|
|
%% We need to trap exit signals in order to shutdown properly. |
|
|
|
process_flag(trap_exit, true), |
|
|
|
{ok, #state{port = Port, baseFileName = BaseFilename}, {nTimeout, connect, 0, doConnect}}. |
|
|
|
|
|
|
@ -54,22 +52,15 @@ handleInfo({tcp, Socket, Bin}, State = #state{socket = Socket, ioDevice = IoDevi |
|
|
|
true -> |
|
|
|
{noreply, State#state{eventsThisFrame = NumEvents, buffer = Buffer}} |
|
|
|
end; |
|
|
|
handleInfo({tcp_closed, Socket}, State = #state{socket = Socket, ioDevice = IoDevice, buffer = Buffer}) -> |
|
|
|
_ = gen_tcp:close(Socket), |
|
|
|
_ = file:write(IoDevice, lz4f:compress_frame(Buffer)), |
|
|
|
_ = file:close(IoDevice), |
|
|
|
{noreply, State#state{socket = undefined, ioDevice = undefined, buffer = <<>>}, {nTimeout, connect, 0, doConnect}}; |
|
|
|
handleInfo({tcp_error, Socket, _}, State = #state{socket = Socket, ioDevice = IoDevice, buffer = Buffer}) -> |
|
|
|
_ = gen_tcp:close(Socket), |
|
|
|
_ = file:write(IoDevice, lz4f:compress_frame(Buffer)), |
|
|
|
_ = file:close(IoDevice), |
|
|
|
{noreply, State#state{socket = undefined, ioDevice = undefined, buffer = <<>>}, {nTimeout, connect, 0, doConnect}}; |
|
|
|
handleInfo({tcp_closed, _Socket}, State) -> |
|
|
|
{noreply, clearSet(State), {nTimeout, connect, 0, doConnect}}; |
|
|
|
handleInfo({tcp_error, _Socket, _}, State) -> |
|
|
|
{noreply, clearSet(State), {nTimeout, connect, 0, doConnect}}; |
|
|
|
handleInfo(doConnect, #state{port = Port, baseFileName = Filename0, nth = Nth} = State) -> |
|
|
|
case gen_tcp:connect("localhost", Port, [binary, {packet, 2}, {active, true}]) of |
|
|
|
{ok, Socket} -> |
|
|
|
Filename = filename:flatten([Filename0, ".", integer_to_list(Nth)]), |
|
|
|
{ok, IoDevice} = file:open(Filename, [write, raw]), |
|
|
|
|
|
|
|
{noreply, State#state{socket = Socket, nth = Nth + 1, ioDevice = IoDevice}}; |
|
|
|
{error, _} -> |
|
|
|
{noreply, State, {nTimeout, connect, 1000, doConnect}} |
|
|
@ -80,7 +71,11 @@ handleInfo(_Msg, _State) -> |
|
|
|
code_change(_OldVsn, State, _Extra) -> |
|
|
|
{ok, State}. |
|
|
|
|
|
|
|
terminate(_Reason, #state{socket = Socket, ioDevice = IoDevice, buffer = Buffer} = _State) -> |
|
|
|
terminate(_Reason, State) -> |
|
|
|
clearSet(State), |
|
|
|
ok. |
|
|
|
|
|
|
|
clearSet(#state{socket = Socket, ioDevice = IoDevice, buffer = Buffer} = State) -> |
|
|
|
case Socket of |
|
|
|
undefined -> |
|
|
|
ignore; |
|
|
@ -95,4 +90,5 @@ terminate(_Reason, #state{socket = Socket, ioDevice = IoDevice, buffer = Buffer} |
|
|
|
_ = file:write(IoDevice, lz4f:compress_frame(Buffer)), |
|
|
|
_ = file:close(IoDevice) |
|
|
|
end, |
|
|
|
ok. |
|
|
|
State#state{socket = undefined, ioDevice = undefined, buffer = <<>>}. |
|
|
|
|