JMYRP5MUPSBHABHBPIO45F6RC7QSQSNO2EJDUDUIQXX3MEEFDOAQC CBHKQGLDCAH2E4ZNACITBSMADOKPERFCWQPUGMH7UN5TLJXLYI4QC 755UGKECZ3PFYEA2TFFOUZTF27CRQTBZWO7UYFU6WQDJMZDBVPRAC R4JDMB7LL3FLA4NJEAV2DQEXII5XS5KIMG3H4YS5P6W7ZZUE7FIQC 4NDLPBWK3HHQ53RB3R3NHXFJGSZDIBNDHWGU5V7KPBKJUTGICKFAC IHBNW3GI2XB6KAWUYRLL6KDOBUNUOU3N7RRLS6BFNW6SE7ZDHLWQC M4TNRFRPHEH6T673JAMJ3CHABASCWMAJVU57HH2XEMDJCB3QPT5QC 55WLMLEEVBRSTAFRZ5RGF7TOGUF5OPVCPA2TMHAQK45OUO7PA3YQC DZZ4B3UGIYTN3OHAKS2HNCLK7KM2ZSHPZ4JC6YVQL6I2H4KCD5PAC YDZ3R5NY7II7WX4Q5O2UQ72TMCABDPPRLEMTTIBH5DGKOLAOPOPAC YWCRGWVDIMCPXBQFM23MKCYZCXJJSD733NJEPB6WUU4G4BSREILAC MONVI5STEDKY5ALVMEXJJXDUX6XQRKTFLP7BBNOQML3VSJEM2JAAC QHK3BXHEC6IAAI7HK76Y7W3IQQIEFH7TD7AYMBCLOE7U2L7BT2LQC % SPDX-FileCopyrightText: 2023 Henry Bubert%% SPDX-License-Identifier: LGPL-2.1-or-later-module(cable_peer_suite).-include_lib("eunit/include/eunit.hrl").open_close_test() ->A = make_test_args(),{ok, P} = peer:start_link(A),ok = peer:stop(P).empty_state_test() ->A = make_test_args(),{ok, P} = peer:start_link(A),{ok, Chans} = peer:channelList(P),?assertEqual([], Chans),ok = peer:stop(P).join_and_leave_test() ->A = make_test_args(),{ok, P} = peer:start_link(A),{ok, []} = peer:channelList(P),peer:join(P, "default"),{ok, ["default"]} = peer:channelList(P),ok = peer:leave(P, "default"),{ok, []} = peer:channelList(P),ok = peer:stop(P).make_test_args() ->S = string:chomp(os:cmd("mktemp --tmpdir -d caberl-peer-XXXXX")),?debugFmt("~nUsing Storage: ~p~n", [S]),[ {listener, ["localhost", 0]}, {storage, S}].
handle_cast(stop, State) ->io:format("[Peer] shutting down~n", []),LisProc = proplists:get_value(listenProc, State),unlink(LisProc),EventLoopProc = proplists:get_value(eventLoop, State),EventLoopProc ! {stop},unlink(EventLoopProc),Db = proplists:get_value(database, State),ok = db:close(Db),{stop, normal, State};
terminate(TermReason, _State) ->io:format("terminating peer: ~p~n", [TermReason]),%% LisProc = proplists:get_value(listenProc, State),%% unlink(LisProc),%% EventLoopProc = proplists:get_value(eventLoop, State),%% unlink(EventLoopProc),
terminate(Reason, _State) ->
{ok, Sock} = gen_tcp:accept(Lis, infinity),{ok, {RemoteIp, Port}} = inet:peername(Sock),io:format("[Peer] Incoming Connection ~p:~p (~p)~n", [RemoteIp, Port, Sock]),Handler ! {peerNew, Sock},listen_loop(Handler, Lis).
case gen_tcp:accept(Lis, infinity) of{error, closed} ->%% io:format("[Peer] Incoming listener closed"),ok;{ok, Sock} ->{ok, {RemoteIp, Port}} = inet:peername(Sock),io:format("[Peer] Incoming Connection ~p:~p (~p)~n", [RemoteIp, Port, Sock]),Handler ! {peerNew, Sock},listen_loop(Handler, Lis)end.