Просмотр исходного кода

ft: 连接池进程启动后确保建立连接后 才返回sup进程

master
SisMaker 1 год назад
Родитель
Сommit
9e47dd7d3a
2 измененных файлов: 50 добавлений и 6 удалений
  1. +25
    -3
      src/agVstCli/agSslAgency.erl
  2. +25
    -3
      src/agVstCli/agTcpAgency.erl

+ 25
- 3
src/agVstCli/agSslAgency.erl Просмотреть файл

@ -56,9 +56,31 @@ safeRegister(ServerName) ->
moduleInit(Parent, Args) ->
case init(Args) of
{ok, SrvState, CliState} ->
proc_lib:init_ack(Parent, {ok, self()}),
?MODULE:loop(Parent, SrvState, CliState);
{ok, #srvState{poolName = PoolName, reConnState = ReConnState} = SrvState, CliState} ->
case ?agBeamPool:getv(PoolName) of
#dbOpts{port = Port, hostname = HostName, dbName = DbName, user = User, password = Password, vstSize = VstSize} ->
case ssl:connect(HostName, Port, ?AgDefSocketOpts, ?AgDefConnTimeout) of
{ok, Socket} ->
ssl:send(Socket, ?AgUpgradeInfo),
AuthInfo = agVstProto:authInfo(User, Password),
ssl:send(Socket, AuthInfo),
case agVstCli:receiveSslData(#recvState{}, Socket) of
{200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}),
?MODULE:loop(Parent, NewSrvState, CliState);
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
exit(_Err)
end;
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
exit(_Err)
end;
_Ret ->
proc_lib:init_ack(Parent, {error, _Ret}),
exit(_Ret)
end;
{stop, Reason} ->
proc_lib:init_ack(Parent, {error, Reason}),
exit(Reason)

+ 25
- 3
src/agVstCli/agTcpAgency.erl Просмотреть файл

@ -56,9 +56,31 @@ safeRegister(ServerName) ->
moduleInit(Parent, Args) ->
case init(Args) of
{ok, SrvState, CliState} ->
proc_lib:init_ack(Parent, {ok, self()}),
?MODULE:loop(Parent, SrvState, CliState);
{ok, #srvState{poolName = PoolName, reConnState = ReConnState} = SrvState, CliState} ->
case ?agBeamPool:getv(PoolName) of
#dbOpts{port = Port, hostname = HostName, dbName = DbName, user = User, password = Password, vstSize = VstSize} ->
case gen_tcp:connect(HostName, Port, ?AgDefSocketOpts, ?AgDefConnTimeout) of
{ok, Socket} ->
agMiscUtils:syncSend(Socket, ?AgUpgradeInfo),
AuthInfo = agVstProto:authInfo(User, Password),
agMiscUtils:syncSend(Socket, AuthInfo),
case agVstCli:receiveTcpData(#recvState{}, Socket) of
{200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}),
?MODULE:loop(Parent, NewSrvState, CliState);
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
exit(_Err)
end;
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
exit(_Err)
end;
_Ret ->
proc_lib:init_ack(Parent, {error, _Ret}),
exit(_Ret)
end;
{stop, Reason} ->
proc_lib:init_ack(Parent, {error, Reason}),
exit(Reason)

Загрузка…
Отмена
Сохранить