瀏覽代碼

ft: 改成port版本 支持监听 .config文件修改 并使用onsyncFun 处理监听到的config文件

master
SisMaker 4 年之前
父節點
當前提交
8751a182e4
共有 2 個文件被更改,包括 35 次插入65 次删除
  1. +26
    -57
      src/sync/esSyncSrv.erl
  2. +9
    -8
      src/sync/esUtils.erl

+ 26
- 57
src/sync/esSyncSrv.erl 查看文件

@ -38,8 +38,7 @@
srcFiles = #{} :: map()
, onsyncFun = undefined
, swSyncNode = false
, sockMod = undefined
, sock = undefined
, port = undefined
}).
%% ************************************ API start ***************************
@ -95,37 +94,11 @@ init(_Args) ->
{ok, waiting, #state{}, {doAfter, ?None}}.
handleAfter(?None, waiting, State) ->
%% tcp
case gen_tcp:listen(0, ?TCP_DEFAULT_OPTIONS) of
{ok, LSock} ->
{ok, ListenPort} = inet:port(LSock),
case prim_inet:async_accept(LSock, -1) of
{ok, _Ref} ->
{ok, SockMod} = inet_db:lookup_socket(LSock),
spawn(fun() ->
case os:type() of
{win32, _Osname} ->
CmtStr = "start " ++ esUtils:fileSyncPath("fileSync.exe") ++ " ./ " ++ integer_to_list(ListenPort),
CmdRet = os:cmd(CmtStr),
RetMsg = io_lib:format("the os:cmd start fileSync CmtStr:~p ret:~p ~n ", [CmtStr, CmdRet]),
esUtils:logErrors(RetMsg);
_ ->
CmtStr = esUtils:fileSyncPath("fileSync") ++ " ./ " ++ integer_to_list(ListenPort),
CmdRet = os:cmd(CmtStr),
RetMsg = io_lib:format("the os:cmd start fileSync CmtStr:~p ret:~p ~n ", [CmtStr, CmdRet]),
esUtils:logErrors(RetMsg)
end end),
{kpS, State#state{sockMod = SockMod}, {sTimeout, 4000, waitConnOver}};
{error, Reason} ->
Msg = io_lib:format("init prim_inet:async_accept error ~p~n", [Reason]),
esUtils:logErrors(Msg),
{kpS, State, {sTimeout, 2000, waitConnOver}}
end;
{error, Reason} ->
Msg = io_lib:format("failed to listen ~p (~s) ~n", [Reason, inet:format_error(Reason)]),
esUtils:logErrors(Msg),
{kpS, State, {sTimeout, 2000, waitConnOver}}
end.
%% port
PortName = esUtils:fileSyncPath("fileSync"),
Opts = [{packet, 4}, binary, exit_status, use_stdio],
Port = erlang:open_port({spawn_executable, PortName}, Opts),
{kpS, State#state{port = Port}, {sTimeout, 4000, waitConnOver}}.
handleCall(miGetOnsync, _, #state{onsyncFun = OnSync} = State, _From) ->
{reply, OnSync, State};
@ -153,10 +126,11 @@ handleCast(miRescan, _, State) ->
handleCast(_Msg, _, _State) ->
kpS_S.
handleInfo({tcp, _Socket, Data}, running, #state{srcFiles = SrcFiles, onsyncFun = OnsyncFun, swSyncNode = SwSyncNode} = State) ->
handleInfo({_Port, {data, Data}}, running, #state{srcFiles = SrcFiles, onsyncFun = OnsyncFun, swSyncNode = SwSyncNode} = State) ->
FileList = binary:split(Data, <<"\r\n">>, [global]),
%% beam hrl src
{Beams, Hrls, Srcs} = esUtils:classifyChangeFile(FileList, [], [], []),
{Beams, Hrls, Srcs, Configs} = esUtils:classifyChangeFile(FileList, [], [], [], []),
esUtils:fireOnsync(OnsyncFun, Configs),
esUtils:reloadChangedMod(Beams, SwSyncNode, OnsyncFun, []),
case ?esCfgSync:getv(?compileCmd) of
undefined ->
@ -185,45 +159,40 @@ handleInfo({tcp, _Socket, Data}, running, #state{srcFiles = SrcFiles, onsyncFun
end,
kpS_S
end;
handleInfo({inet_async, LSock, _Ref, Msg}, _, #state{sockMod = SockMod} = State) ->
case Msg of
{ok, Sock} ->
%% make it look like gen_tcp:accept
inet_db:register_socket(Sock, SockMod),
inet:setopts(Sock, [{active, true}]),
prim_inet:async_accept(LSock, -1),
%%
handleInfo({_Port, {data, Data}}, _, #state{port = Port} = State) ->
case Data of
<<"init">> ->
%% port启动成功
{AddSrcDirs, OnlySrcDirs, DelSrcDirs} = esUtils:mergeExtraDirs(false),
AddStr = string:join([filename:nativename(OneDir) || OneDir <- AddSrcDirs], "|"),
OnlyStr = string:join([filename:nativename(OneDir) || OneDir <- OnlySrcDirs], "|"),
DelStr = string:join([filename:nativename(OneDir) || OneDir <- DelSrcDirs], "|"),
AllStr = string:join([AddStr, OnlyStr, DelStr], "\r\n"),
gen_tcp:send(Sock, AllStr),
erlang:port_command(Port, AllStr),
esUtils:logSuccess("eSync connect fileSync success..."),
case ?esCfgSync:getv(?compileCmd) of
undefined ->
%% src文件
SrcFiles = esUtils:collSrcFiles(true),
{nextS, running, State#state{sock = Sock, srcFiles = SrcFiles}};
{nextS, running, State#state{srcFiles = SrcFiles}};
_ ->
{nextS, running, State}
end;
{error, closed} ->
Msg = io_lib:format("error, closed listen sock error ~p~n", [closed]),
esUtils:logErrors(Msg),
{stop, normal};
{error, Reason} ->
Msg = io_lib:format("listen sock error ~p~n", [Reason]),
_ ->
Msg = io_lib:format("error, esSyncSrv receive unexpect port msg ~p~n", [Data]),
esUtils:logErrors(Msg),
{stop, {lsock, Reason}}
kpS_S
end;
handleInfo({tcp_closed, _Socket}, running, _State) ->
Msg = io_lib:format("esSyncSrv receive tcp_closed ~n", []),
handleInfo({_Port, closed}, running, _State) ->
Msg = io_lib:format("esSyncSrv receive port closed ~n", []),
esUtils:logErrors(Msg),
kpS_S;
handleInfo({'EXIT', _Port, Reason}, running, _State) ->
Msg = io_lib:format("esSyncSrv receive port exit Reason:~p ~n", [Reason]),
esUtils:logErrors(Msg),
kpS_S;
handleInfo({tcp_error, _Socket, Reason}, running, _State) ->
Msg = io_lib:format("esSyncSrv receive tcp_error Reason:~p ~n", [Reason]),
handleInfo({_Port, {exit_status, Status}}, running, _State) ->
Msg = io_lib:format("esSyncSrv receive port exit_status Status:~p ~n", [Status]),
esUtils:logErrors(Msg),
kpS_S;
handleInfo(_Msg, _, _State) ->

+ 9
- 8
src/sync/esUtils.erl 查看文件

@ -341,7 +341,6 @@ mergeExtraDirs(IsAddPath) ->
begin
case IsAddPath of
true ->
case proplists:get_value(outdir, Opts) of
undefined ->
true;
@ -863,19 +862,21 @@ doMathEveryLine(IoDevice, HrlFileBaseName) ->
false
end.
classifyChangeFile([], Beams, Hrls, Srcs) ->
{Beams, Hrls, Srcs};
classifyChangeFile([OneFile | LeftFile], Beams, Hrls, Srcs) ->
classifyChangeFile([], Beams, Hrls, Srcs, Configs) ->
{Beams, Hrls, Srcs, Configs};
classifyChangeFile([OneFile | LeftFile], Beams, Hrls, Srcs, Configs) ->
case filename:extension(OneFile) of
<<".beam">> ->
Module = binary_to_atom(filename:basename(OneFile, <<".beam">>)),
classifyChangeFile(LeftFile, [Module | Beams], Hrls, Srcs);
classifyChangeFile(LeftFile, [Module | Beams], Hrls, Srcs, Configs);
<<".hrl">> ->
classifyChangeFile(LeftFile, Beams, [OneFile | Hrls], Srcs);
classifyChangeFile(LeftFile, Beams, [OneFile | Hrls], Srcs, Configs);
<<".config">> ->
classifyChangeFile(LeftFile, Beams, Hrls, Srcs, [OneFile | Configs]);
<<>> ->
classifyChangeFile(LeftFile, Beams, Hrls, Srcs);
classifyChangeFile(LeftFile, Beams, Hrls, Srcs, Configs);
_ ->
classifyChangeFile(LeftFile, Beams, Hrls, [OneFile | Srcs])
classifyChangeFile(LeftFile, Beams, Hrls, [OneFile | Srcs], Configs)
end.
addNewFile([], SrcFiles) ->

Loading…
取消
儲存