diff --git a/apps/sdlan/src/mnesia/client_model.erl b/apps/sdlan/src/mnesia/client_model.erl deleted file mode 100644 index edb7d9c..0000000 --- a/apps/sdlan/src/mnesia/client_model.erl +++ /dev/null @@ -1,162 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author aresei -%%% @copyright (C) 2023, -%%% @doc -%%% -%%% @end -%%% Created : 04. 7月 2023 12:31 -%%%------------------------------------------------------------------- --module(client_model). --author("aresei"). --include("sdlan_tables.hrl"). --include_lib("stdlib/include/qlc.hrl"). - -%% API --export([create_table/1, get_table_name/1]). --export([get_clients/1, get_client/2, delete_clients/1, delete_client/2, disable_client/2, alloc_ip/6]). --export([debug/1]). - -create_table(Tab) when is_atom(Tab) -> - mnesia:create_table(Tab, [ - {attributes, record_info(fields, client)}, - {record_name, client}, - {disc_copies, [node()]}, - {type, set} - ]). - --spec get_table_name(NetworkId :: integer()) -> TableName :: atom(). -get_table_name(NetworkId) when is_integer(NetworkId) -> - list_to_atom("client_" ++ integer_to_list(NetworkId)). - --spec get_client(NetworkId :: integer(), ClientId :: binary()) -> error | {ok, Client :: #client{}} . -get_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientId) -> - Tab = get_table_name(NetworkId), - case mnesia:dirty_read(Tab, ClientId) of - [] -> - error; - [Client|_] -> - {ok, Client} - end. - --spec get_clients(NetworkId :: integer()) -> [Client :: #client{}]. -get_clients(NetworkId) when is_integer(NetworkId) -> - Tab = get_table_name(NetworkId), - case mnesia:transaction(fun() -> mnesia:foldl(fun(R, Acc0) -> [R|Acc0] end, [], Tab) end) of - {'atomic', Items} -> - lists:reverse(Items); - {'aborted', _} -> - [] - end. - --spec delete_clients(NetworkId :: integer()) -> ok | {error, Reason :: any()}. -delete_clients(NetworkId) when is_integer(NetworkId) -> - Tab = get_table_name(NetworkId), - case mnesia:transaction(fun() -> mnesia:clear_table(Tab) end) of - {'atomic', ok} -> - ok; - {'aborted', Reason} -> - {error, Reason} - end. - --spec delete_client(NetworkId :: integer(), ClientId :: binary()) -> {ok, Client :: #client{}} | {error, Reason :: any()}. -delete_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientId) -> - Tab = get_table_name(NetworkId), - - Fun = fun() -> - case mnesia:read(Tab, ClientId, write) of - [] -> - mnesia:abort(not_found); - [Record] -> - mnesia:delete(Tab, ClientId, write), - {ok, Record} - end - end, - - case mnesia:transaction(Fun) of - {'atomic', {ok, Client}} -> - {ok, Client}; - {'aborted', Reason} -> - {error, Reason} - end. - --spec disable_client(NetworkId :: integer(), ClientId :: binary()) -> ok | {error, Reason :: any()}. -disable_client(NetworkId, ClientId) when is_integer(NetworkId), is_binary(ClientId) -> - Tab = get_table_name(NetworkId), - Fun = fun() -> - case mnesia:read(Tab, ClientId, read) of - [] -> - ok; - [Client] -> - mnesia:write(Tab, Client#client{status = disabled}, write) - end - end, - - case mnesia:transaction(Fun) of - {'atomic', ok} -> - ok; - {'aborted', Reason} -> - {error, Reason} - end. - -%% 分配ip地址的时候,以mac地址为唯一基准 --spec alloc_ip(NetworkId :: integer(), Ips :: list(), ClientId :: binary(), Mac :: binary(), NetAddr0 :: integer(), HostName :: binary()) -> - {ok, Ip :: integer()} | {error, Reason :: any()}. -alloc_ip(NetworkId, Ips, ClientId, Mac, NetAddr0, HostName) when is_binary(ClientId), is_integer(NetAddr0), is_binary(Mac), is_binary(HostName) -> - case mnesia:transaction(fun() -> alloc_ip0(NetworkId, Ips, ClientId, Mac, NetAddr0, HostName) end) of - {'atomic', Res} -> - {ok, Res}; - {'aborted', Reason} -> - {error, Reason} - end. -alloc_ip0(NetworkId, Ips, ClientId, Mac, NetAddr0, HostName) -> - Tab = get_table_name(NetworkId), - - case mnesia:read(Tab, ClientId) of - [Client=#client{ip = Ip, status = normal}] -> - ok = mnesia:write(Tab, Client#client{mac = Mac}, write), - Ip; - [#client{status = disabled}] -> - mnesia:abort(client_disabled); - [] -> - {UsedIps, UsedHostNames} = mnesia:foldl(fun(#client{ip = Ip0, host_name = HostName0}, {IpAcc, HostNameAcc}) -> - {[Ip0|IpAcc], [HostName0|HostNameAcc]} - end, {[], []}, Tab), - case HostName =/= <<>> andalso lists:member(HostName, UsedHostNames) of - true -> - mnesia:abort(host_name_used); - false -> - case lists:member(NetAddr0, Ips) andalso not lists:member(NetAddr0, UsedIps) of - true -> - %% 如果ip没有被占用,则分配給当前请求 - Client = #client{client_id = ClientId, mac = Mac, ip = NetAddr0, host_name = HostName, status = normal}, - ok = mnesia:write(Tab, Client, write), - NetAddr0; - false -> - case Ips -- UsedIps of - [] -> - mnesia:abort(no_ip); - [Ip|_] -> - Client = #client{client_id = ClientId, mac = Mac, ip = Ip, host_name = HostName, status = normal}, - ok = mnesia:write(Tab, Client, write), - Ip - end - end - end - end. - -%%%=================================================================== -%%% helper functions -%%%=================================================================== - -debug(NetworkId) when is_integer(NetworkId) -> - Tab = get_table_name(NetworkId), - F = fun() -> - Q = qlc:q([E || E <- mnesia:table(Tab)]), - qlc:e(Q) - end, - case mnesia:transaction(F) of - {'atomic', Records} -> - lists:foreach(fun(C) -> logger:debug("client: ~p", [C]) end, Records); - {'aborted', Reason} -> - logger:warning("read clients get error: ~p", [Reason]) - end. \ No newline at end of file diff --git a/apps/sdlan/src/mnesia/mnesia_id_generator.erl b/apps/sdlan/src/mnesia/mnesia_id_generator.erl deleted file mode 100644 index cab8586..0000000 --- a/apps/sdlan/src/mnesia/mnesia_id_generator.erl +++ /dev/null @@ -1,26 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author aresei -%%% @copyright (C) 2023, -%%% @doc -%%% -%%% @end -%%% Created : 04. 7月 2023 12:31 -%%%------------------------------------------------------------------- --module(mnesia_id_generator). --author("aresei"). --include("sdlan.hrl"). - -%% API --export([next_id/1, create_table/0]). - -create_table() -> - %% id生成器 - mnesia:create_table(id_generator, [ - {attributes, record_info(fields, id_generator)}, - {record_name, id_generator}, - {disc_copies, [node()]}, - {type, ordered_set} - ]). - -next_id(Tab) when is_atom(Tab) -> - mnesia:dirty_update_counter(id_generator, Tab, 1). \ No newline at end of file diff --git a/apps/sdlan/src/mnesia/mnesia_manager.erl b/apps/sdlan/src/mnesia/mnesia_manager.erl deleted file mode 100644 index 55e18bd..0000000 --- a/apps/sdlan/src/mnesia/mnesia_manager.erl +++ /dev/null @@ -1,43 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2024, -%%% @doc -%%% TODO 数据库暂时不启用 -%%% @end -%%% Created : 28. 3月 2024 11:01 -%%%------------------------------------------------------------------- --module(mnesia_manager). --author("anlicheng"). --include("sdlan.hrl"). - -%% API --export([init_database/0, join/1, copy_database/1]). - -init_database() -> - %% 清理掉以前的schema - mnesia:stop(), - mnesia:delete_schema([node()]), - - %% 创建schema - ok = mnesia:create_schema([node()]), - ok = mnesia:start(), - ok. - -%% 加入集群 -join(MasterNode) when is_atom(MasterNode) -> - net_kernel:connect_node(MasterNode). - -%% 初始化slave数据库 -copy_database(MasterNode) when is_atom(MasterNode) -> - %% 清理旧的schema - mnesia:stop(), - mnesia:delete_schema([node()]), - %% 重新启动数据库 - mnesia:start(), - - rpc:call(MasterNode, mnesia, change_config, [extra_db_nodes, [node()]]), - mnesia:change_table_copy_type(schema, node(), disc_copies), - - %% 增加表的分区复制 - % mnesia:add_table_copy(client, node(), ram_copies), - ok. \ No newline at end of file diff --git a/apps/sdlan/src/model/network_bo.erl b/apps/sdlan/src/model/network_bo.erl deleted file mode 100644 index c1160f6..0000000 --- a/apps/sdlan/src/model/network_bo.erl +++ /dev/null @@ -1,29 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author aresei -%%% @copyright (C) 2023, -%%% @doc -%%% -%%% @end -%%% Created : 16. 5月 2023 12:48 -%%%------------------------------------------------------------------- --module(network_bo). --author("aresei"). --include("sdlan.hrl"). - --define(POOL_NAME, mysql_sdlan). - -%% API --export([get_all_networks/0, get_network_by_id/1]). - --spec get_all_networks() -> Networks :: [integer()]. -get_all_networks() -> - case mysql_pool:get_all(?POOL_NAME, <<"SELECT id FROM network">>) of - {ok, Networks} -> - lists:map(fun(#{<<"id">> := Id}) -> Id end, Networks); - {error, _} -> - [] - end. - --spec get_network_by_id(Id :: integer()) -> undefined | {ok, NetworkInfo :: map()}. -get_network_by_id(Id) when is_integer(Id) -> - mysql_pool:get_row(?POOL_NAME, <<"SELECT * FROM network WHERE id = ? LIMIT 1">>, [Id]). \ No newline at end of file diff --git a/apps/sdlan/src/mysql/mysql_pool.erl b/apps/sdlan/src/mysql/mysql_pool.erl deleted file mode 100644 index cbceac5..0000000 --- a/apps/sdlan/src/mysql/mysql_pool.erl +++ /dev/null @@ -1,48 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author aresei -%%% @copyright (C) 2018, -%%% @doc -%%% -%%% @end -%%% Created : 29. 九月 2018 17:01 -%%%------------------------------------------------------------------- --module(mysql_pool). --author("aresei"). - -%% API --export([get_row/2, get_row/3, get_all/2, get_all/3]). --export([update/4, update_by/2, update_by/3, insert/4]). - -%% 从数据库中查找一行记录 --spec get_row(Pool :: atom(), Sql::binary()) -> {ok, Record::map()} | undefined. -get_row(Pool, Sql) when is_atom(Pool), is_binary(Sql) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_row(ConnPid, Sql) end). - --spec get_row(Pool :: atom(), Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined. -get_row(Pool, Sql, Params) when is_atom(Pool), is_binary(Sql), is_list(Params) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_row(ConnPid, Sql, Params) end). - --spec get_all(Pool :: atom(), Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}. -get_all(Pool, Sql) when is_atom(Pool), is_binary(Sql) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql) end). - --spec get_all(Pool :: atom(), Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}. -get_all(Pool, Sql, Params) when is_atom(Pool), is_binary(Sql), is_list(Params) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:get_all(ConnPid, Sql, Params) end). - --spec insert(Pool :: atom(), Table :: binary(), Fields :: map() | list(), boolean()) -> - ok | {ok, InsertId :: integer()} | {error, Reason :: any()}. -insert(Pool, Table, Fields, FetchInsertId) when is_atom(Pool), is_binary(Table), is_list(Fields); is_map(Fields), is_boolean(FetchInsertId) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:insert(ConnPid, Table, Fields, FetchInsertId) end). - --spec update_by(Pool :: atom(), UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}. -update_by(Pool, UpdateSql) when is_atom(Pool), is_binary(UpdateSql) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql) end). - --spec update_by(Pool :: atom(), UpdateSql :: binary(), Params :: list()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}. -update_by(Pool, UpdateSql, Params) when is_atom(Pool), is_binary(UpdateSql) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:update_by(ConnPid, UpdateSql, Params) end). - --spec update(Pool :: atom(), Table :: binary(), Fields :: map(), WhereFields :: map()) -> {ok, AffectedRows::integer()} | {error, Reason::any()}. -update(Pool, Table, Fields, WhereFields) when is_atom(Pool), is_binary(Table), is_map(Fields), is_map(WhereFields) -> - poolboy:transaction(Pool, fun(ConnPid) -> mysql_provider:update(ConnPid, Table, Fields, WhereFields) end). \ No newline at end of file diff --git a/apps/sdlan/src/mysql/mysql_provider.erl b/apps/sdlan/src/mysql/mysql_provider.erl deleted file mode 100644 index e246124..0000000 --- a/apps/sdlan/src/mysql/mysql_provider.erl +++ /dev/null @@ -1,144 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author aresei -%%% @copyright (C) 2018, -%%% @doc -%%% -%%% @end -%%% Created : 29. 九月 2018 17:01 -%%%------------------------------------------------------------------- --module(mysql_provider). --author("aresei"). - -%% API --export([get_row/2, get_row/3, get_all/2, get_all/3]). --export([update/4, update_by/2, update_by/3, insert/4]). - -%% 从数据库中查找一行记录 --spec get_row(ConnPid :: pid(), Sql::binary()) -> {ok, Record::map()} | undefined. -get_row(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) -> - logger:debug("[mysql_client] get_row sql is: ~p", [Sql]), - case mysql:query(ConnPid, Sql) of - {ok, Names, [Row | _]} -> - {ok, maps:from_list(lists:zip(Names, Row))}; - {ok, _, []} -> - undefined; - Error -> - logger:warning("[mysql_client] get error: ~p", [Error]), - undefined - end. - --spec get_row(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Record::map()} | undefined. -get_row(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) -> - logger:debug("[mysql_client] get_row sql is: ~p, params: ~p", [Sql, Params]), - case mysql:query(ConnPid, Sql, Params) of - {ok, Names, [Row | _]} -> - {ok, maps:from_list(lists:zip(Names, Row))}; - {ok, _, []} -> - undefined; - Error -> - logger:warning("[mysql_client] get error: ~p", [Error]), - undefined - end. - --spec get_all(ConnPid :: pid(), Sql::binary()) -> {ok, Rows::list()} | {error, Reason :: any()}. -get_all(ConnPid, Sql) when is_pid(ConnPid), is_binary(Sql) -> - logger:debug("[mysql_client] get_all sql is: ~p", [Sql]), - case mysql:query(ConnPid, Sql) of - {ok, Names, Rows} -> - {ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)}; - {error, Reason} -> - logger:warning("[mysql_client] get error: ~p", [Reason]), - {error, Reason} - end. - --spec get_all(ConnPid :: pid(), Sql::binary(), Params::list()) -> {ok, Rows::list()} | {error, Reason::any()}. -get_all(ConnPid, Sql, Params) when is_pid(ConnPid), is_binary(Sql), is_list(Params) -> - logger:debug("[mysql_client] get_all sql is: ~p, params: ~p", [Sql, Params]), - case mysql:query(ConnPid, Sql, Params) of - {ok, Names, Rows} -> - {ok, lists:map(fun(Row) -> maps:from_list(lists:zip(Names, Row)) end, Rows)}; - {error, Reason} -> - logger:warning("[mysql_client] get error: ~p", [Reason]), - {error, Reason} - end. - --spec insert(ConnPid :: pid(), Table :: binary(), Fields :: map() | list(), boolean()) -> - ok | {ok, InsertId :: integer()} | {error, Reason :: any()}. -insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_boolean(FetchInsertId) -> - insert(ConnPid, Table, maps:to_list(Fields), FetchInsertId); -insert(ConnPid, Table, Fields, FetchInsertId) when is_pid(ConnPid), is_binary(Table), is_list(Fields), is_boolean(FetchInsertId) -> - {Keys, Values} = kvs(Fields), - - FieldSql = iolist_to_binary(lists:join(<<", ">>, Keys)), - Placeholders = lists:duplicate(length(Keys), <<"?">>), - ValuesPlaceholder = iolist_to_binary(lists:join(<<", ">>, Placeholders)), - - Sql = <<"INSERT INTO ", Table/binary, "(", FieldSql/binary, ") VALUES(", ValuesPlaceholder/binary, ")">>, - logger:debug("[mysql_client] insert sql is: ~p, params: ~p", [Sql, Values]), - case mysql:query(ConnPid, Sql, Values) of - ok -> - case FetchInsertId of - true -> - InsertId = mysql:insert_id(ConnPid), - {ok, InsertId}; - false -> - ok - end; - Error -> - Error - end. - --spec update_by(ConnPid :: pid(), UpdateSql :: binary()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}. -update_by(ConnPid, UpdateSql) when is_pid(ConnPid), is_binary(UpdateSql) -> - logger:debug("[mysql_client] updateBySql sql: ~p", [UpdateSql]), - case mysql:query(ConnPid, UpdateSql) of - ok -> - AffectedRows = mysql:affected_rows(ConnPid), - {ok, AffectedRows}; - Error -> - Error - end. - --spec update_by(ConnPid :: pid(), UpdateSql :: binary(), Params :: list()) -> {ok, AffectedRows :: integer()} | {error, Reason :: any()}. -update_by(ConnPid, UpdateSql, Params) when is_pid(ConnPid), is_binary(UpdateSql) -> - logger:debug("[mysql_client] updateBySql sql: ~p, params: ~p", [UpdateSql, Params]), - case mysql:query(ConnPid, UpdateSql, Params) of - ok -> - AffectedRows = mysql:affected_rows(ConnPid), - {ok, AffectedRows}; - Error -> - Error - end. - --spec update(ConnPid :: pid(), Sql :: binary(), Fields :: map(), WhereFields :: map()) -> - {ok, AffectedRows::integer()} | {error, Reason::any()}. -update(ConnPid, Table, Fields, WhereFields) when is_pid(ConnPid), is_binary(Table), is_map(Fields), is_map(WhereFields) -> - %% 拼接set - {SetKeys, SetVals} = kvs(Fields), - SetKeys1 = lists:map(fun(K) when is_binary(K) -> <<"`", K/binary, "` = ?">> end, SetKeys), - SetSql = iolist_to_binary(lists:join(<<", ">>, SetKeys1)), - - %% 拼接where - {WhereKeys, WhereVals} = kvs(WhereFields), - WhereKeys1 = lists:map(fun(K) when is_binary(K) -> <<"`", K/binary, "` = ?">> end, WhereKeys), - WhereSql = iolist_to_binary(lists:join(<<" AND ">>, WhereKeys1)), - - Params = SetVals ++ WhereVals, - - Sql = <<"UPDATE ", Table/binary, " SET ", SetSql/binary, " WHERE ", WhereSql/binary>>, - logger:debug("[mysql_client] update sql is: ~p, params: ~p", [Sql, Params]), - case mysql:query(ConnPid, Sql, Params) of - ok -> - AffectedRows = mysql:affected_rows(ConnPid), - {ok, AffectedRows}; - Error -> - logger:error("[mysql_client] update sql: ~p, params: ~p, get a error: ~p", [Sql, Params, Error]), - Error - end. - --spec kvs(Fields :: map() | list()) -> {Keys :: list(), Values :: list()}. -kvs(Fields) when is_map(Fields) -> - kvs(maps:to_list(Fields)); -kvs(Fields) when is_list(Fields) -> - {Keys0, Values0} = lists:foldl(fun({K, V}, {Acc0, Acc1}) -> {[K|Acc0], [V|Acc1]} end, {[], []}, Fields), - {lists:reverse(Keys0), lists:reverse(Values0)}. \ No newline at end of file diff --git a/apps/sdlan/src/test/sdlan_tcp_client.erl b/apps/sdlan/src/test/sdlan_tcp_client.erl deleted file mode 100644 index cae3213..0000000 --- a/apps/sdlan/src/test/sdlan_tcp_client.erl +++ /dev/null @@ -1,101 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2024, -%%% @doc -%%% -%%% @end -%%% Created : 29. 3月 2024 14:32 -%%%------------------------------------------------------------------- --module(sdlan_tcp_client). --author("anlicheng"). - --behaviour(gen_server). - -%% API --export([start_link/0]). - -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). - --define(SERVER, ?MODULE). - --record(state, { - socket -}). - -%%%=================================================================== -%%% API -%%%=================================================================== - -%% @doc Spawns the server and registers the local name (unique) --spec(start_link() -> - {ok, Pid :: pid()} | ignore | {error, Reason :: term()}). -start_link() -> - gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). - -%%%=================================================================== -%%% gen_server callbacks -%%%=================================================================== - -%% @private -%% @doc Initializes the server --spec(init(Args :: term()) -> - {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | - {stop, Reason :: term()} | ignore). -init([]) -> - {ok, Socket} = gen_tcp:connect("localhost", 18083, [binary, {packet, 2}, {active, true}]), - ok = gen_tcp:send(Socket, <<"hello world">>), - {ok, #state{socket = Socket}}. - -%% @private -%% @doc Handling call messages --spec(handle_call(Request :: term(), From :: {pid(), Tag :: term()}, - State :: #state{}) -> - {reply, Reply :: term(), NewState :: #state{}} | - {reply, Reply :: term(), NewState :: #state{}, timeout() | hibernate} | - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_call(_Request, _From, State = #state{}) -> - {reply, ok, State}. - -%% @private -%% @doc Handling cast messages --spec(handle_cast(Request :: term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_cast(_Request, State = #state{}) -> - {noreply, State}. - -%% @private -%% @doc Handling all non call/cast messages --spec(handle_info(Info :: timeout() | term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_info(_Info, State = #state{}) -> - {noreply, State}. - -%% @private -%% @doc This function is called by a gen_server when it is about to -%% terminate. It should be the opposite of Module:init/1 and do any -%% necessary cleaning up. When it returns, the gen_server terminates -%% with Reason. The return value is ignored. --spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()), - State :: #state{}) -> term()). -terminate(_Reason, _State = #state{}) -> - ok. - -%% @private -%% @doc Convert process state when code is changed --spec(code_change(OldVsn :: term() | {down, term()}, State :: #state{}, - Extra :: term()) -> - {ok, NewState :: #state{}} | {error, Reason :: term()}). -code_change(_OldVsn, State = #state{}, _Extra) -> - {ok, State}. - -%%%=================================================================== -%%% Internal functions -%%%=================================================================== diff --git a/apps/sdlan/src/test/sdlan_udp_downloader.erl b/apps/sdlan/src/test/sdlan_udp_downloader.erl deleted file mode 100644 index 9177b5b..0000000 --- a/apps/sdlan/src/test/sdlan_udp_downloader.erl +++ /dev/null @@ -1,110 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2024, -%%% @doc -%%% -%%% @end -%%% Created : 17. 4月 2024 10:35 -%%%------------------------------------------------------------------- --module(sdlan_udp_downloader). --author("anlicheng"). - --behaviour(gen_server). - -%% API --export([start_link/0]). - -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, - code_change/3]). - --define(SERVER, ?MODULE). - --record(state, { - socket -}). - -%%%=================================================================== -%%% API -%%%=================================================================== - -%% @doc Spawns the server and registers the local name (unique) --spec(start_link() -> - {ok, Pid :: pid()} | ignore | {error, Reason :: term()}). -start_link() -> - gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). - -%%%=================================================================== -%%% gen_server callbacks -%%%=================================================================== - -%% @private -%% @doc Initializes the server --spec(init(Args :: term()) -> - {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | - {stop, Reason :: term()} | ignore). -init([]) -> - {ok, Socket} = gen_udp:open(22222, [binary]), - {ok, #state{socket = Socket}}. - -%% @private -%% @doc Handling call messages --spec(handle_call(Request :: term(), From :: {pid(), Tag :: term()}, - State :: #state{}) -> - {reply, Reply :: term(), NewState :: #state{}} | - {reply, Reply :: term(), NewState :: #state{}, timeout() | hibernate} | - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_call(_Request, _From, State) -> - {reply, ok, State}. - -%% @private -%% @doc Handling cast messages --spec(handle_cast(Request :: term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_cast(_Info, State) -> - {noreply, State}. - -%% @private -%% @doc Handling all non call/cast messages --spec(handle_info(Info :: timeout() | term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_info({udp, Sock, Ip, Port, <<1>>}, State = #state{socket = Sock}) -> - {ok, Content} = file:read_file("/tmp/files/test.dmg"), - send_file_content(Sock, Ip, Port, 1200, Content), - {noreply, State#state{}}. - -%% @private -%% @doc This function is called by a gen_server when it is about to -%% terminate. It should be the opposite of Module:init/1 and do any -%% necessary cleaning up. When it returns, the gen_server terminates -%% with Reason. The return value is ignored. --spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()), - State :: #state{}) -> term()). -terminate(_Reason, _State = #state{}) -> - ok. - -%% @private -%% @doc Convert process state when code is changed --spec(code_change(OldVsn :: term() | {down, term()}, State :: #state{}, - Extra :: term()) -> - {ok, NewState :: #state{}} | {error, Reason :: term()}). -code_change(_OldVsn, State = #state{}, _Extra) -> - {ok, State}. - -%%%=================================================================== -%%% Internal functions -%%%=================================================================== - -send_file_content(Sock, Ip, Port, Size, Content) when byte_size(Content) =< Size -> - gen_udp:send(Sock, Ip, Port, Content); -send_file_content(Sock, Ip, Port, Size, Content) -> - <> = Content, - gen_udp:send(Sock, Ip, Port, Part), - send_file_content(Sock, Ip, Port, Size, Rest). diff --git a/apps/sdlan/src/test/sdlan_udp_wget.erl b/apps/sdlan/src/test/sdlan_udp_wget.erl deleted file mode 100644 index b910336..0000000 --- a/apps/sdlan/src/test/sdlan_udp_wget.erl +++ /dev/null @@ -1,114 +0,0 @@ -%%%------------------------------------------------------------------- -%%% @author anlicheng -%%% @copyright (C) 2024, -%%% @doc -%%% -%%% @end -%%% Created : 17. 4月 2024 10:35 -%%%------------------------------------------------------------------- --module(sdlan_udp_wget). --author("anlicheng"). - --behaviour(gen_server). - -%% API --export([start_link/0]). --export([wget/0]). - -%% gen_server callbacks --export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). - --define(SERVER, ?MODULE). - --record(state, { - socket, - bytes = 0 -}). - -%%%=================================================================== -%%% API -%%%=================================================================== -wget() -> - gen_server:call(?MODULE, wget). - -%% @doc Spawns the server and registers the local name (unique) --spec(start_link() -> - {ok, Pid :: pid()} | ignore | {error, Reason :: term()}). -start_link() -> - gen_server:start_link({local, ?SERVER}, ?MODULE, [], []). - -%%%=================================================================== -%%% gen_server callbacks -%%%=================================================================== - -%% @private -%% @doc Initializes the server --spec(init(Args :: term()) -> - {ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} | - {stop, Reason :: term()} | ignore). -init([]) -> - {ok, Socket} = gen_udp:open(0, [binary, {active, true}]), - inet_udp:controlling_process(Socket, self()), - - erlang:start_timer(5000, self(), qps_ticker), - - {ok, #state{socket = Socket}}. - -%% @private -%% @doc Handling call messages --spec(handle_call(Request :: term(), From :: {pid(), Tag :: term()}, - State :: #state{}) -> - {reply, Reply :: term(), NewState :: #state{}} | - {reply, Reply :: term(), NewState :: #state{}, timeout() | hibernate} | - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_call(wget, _From, State=#state{socket = Socket}) -> - gen_udp:send(Socket, "127.0.0.1", 22222, <<1>>), - {reply, ok, State}. - -%% @private -%% @doc Handling cast messages --spec(handle_cast(Request :: term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_cast(_Info, State) -> - {noreply, State}. - -%% @private -%% @doc Handling all non call/cast messages --spec(handle_info(Info :: timeout() | term(), State :: #state{}) -> - {noreply, NewState :: #state{}} | - {noreply, NewState :: #state{}, timeout() | hibernate} | - {stop, Reason :: term(), NewState :: #state{}}). -handle_info({udp, Sock, _Ip, _Port, Data}, State = #state{socket = Sock, bytes = Bytes}) -> - {noreply, State#state{bytes = Bytes + byte_size(Data)}}; -handle_info({timeout, _, qps_ticker}, State = #state{bytes = Bytes}) -> - logger:debug("[sdlan_udp_wget] qps is: ~p(M)", [Bytes / 1024 / 1024]), - erlang:start_timer(5000, self(), qps_ticker), - {noreply, State#state{bytes = 0}}. - - -%% @private -%% @doc This function is called by a gen_server when it is about to -%% terminate. It should be the opposite of Module:init/1 and do any -%% necessary cleaning up. When it returns, the gen_server terminates -%% with Reason. The return value is ignored. --spec(terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()), - State :: #state{}) -> term()). -terminate(_Reason, _State = #state{}) -> - ok. - -%% @private -%% @doc Convert process state when code is changed --spec(code_change(OldVsn :: term() | {down, term()}, State :: #state{}, - Extra :: term()) -> - {ok, NewState :: #state{}} | {error, Reason :: term()}). -code_change(_OldVsn, State = #state{}, _Extra) -> - {ok, State}. - -%%%=================================================================== -%%% Internal functions -%%%=================================================================== diff --git a/config/sys-dev.config b/config/sys-dev.config index ec9b47d..2b01dc3 100644 --- a/config/sys-dev.config +++ b/config/sys-dev.config @@ -33,21 +33,6 @@ ]}, {pools, [ - %% mysql连接池配置 - {mysql_sdlan, - [{size, 10}, {max_overflow, 20}, {worker_module, mysql}], - [ - {host, {39, 98, 184, 67}}, - {port, 3306}, - {user, "sdlanuser"}, - {connect_mode, lazy}, - {keep_alive, true}, - {password, "sdlan@J1c8WGu"}, - {database, "sdlan"}, - {queries, [<<"set names utf8">>]} - ] - }, - {dns_resolver_pool, [{size, 20}, {max_overflow, 100}, {worker_module, dns_resolver}], [] diff --git a/config/sys-prod.config b/config/sys-prod.config index a7f14d7..d3c3be2 100644 --- a/config/sys-prod.config +++ b/config/sys-prod.config @@ -33,21 +33,6 @@ ]}, {pools, [ - %% mysql连接池配置 - {mysql_sdlan, - [{size, 10}, {max_overflow, 20}, {worker_module, mysql}], - [ - {host, {118, 178, 229, 213}}, - {port, 3306}, - {user, "sdlanuser"}, - {connect_mode, lazy}, - {keep_alive, true}, - {password, "sdlan@J1c8WGu"}, - {database, "sdlan"}, - {queries, [<<"set names utf8">>]} - ] - }, - {dns_resolver_pool, [{size, 20}, {max_overflow, 100}, {worker_module, dns_resolver}], []