diff --git a/ebin/gmhive_client.app b/ebin/gmhive_client.app index 66aad66..3314520 100644 --- a/ebin/gmhive_client.app +++ b/ebin/gmhive_client.app @@ -1,6 +1,6 @@ {application,gmhive_client, [{description,"Gajumaru Hive Client"}, - {vsn,"0.9.3"}, + {vsn,"0.10.0"}, {registered,[]}, {applications,[kernel,stdlib,sasl,gproc,inets,ssl,enoise, gmconfig,gmhive_protocol,gmhive_worker]}, diff --git a/src/gmhc_app.erl b/src/gmhc_app.erl index c26d92d..ba914d7 100644 --- a/src/gmhc_app.erl +++ b/src/gmhc_app.erl @@ -17,7 +17,7 @@ -spec start([{atom(), any()}]) -> {ok, [atom()]} | {error, any()}. start(Opts) -> application:load(gmhive_client), - {error,_} = application:stop(gmhive_client), + _ = application:stop(gmhive_client), _ = lists:foreach(fun({K, V}) -> application:set_env(gmhive_client, K, V) end, Opts), diff --git a/src/gmhc_connector.erl b/src/gmhc_connector.erl index beffbfc..2b2d90f 100644 --- a/src/gmhc_connector.erl +++ b/src/gmhc_connector.erl @@ -57,6 +57,7 @@ , auto_connect = true :: boolean() , econn , connected = false :: boolean() + , status = disconnected :: disconnected | connecting | connected , reconnect = true :: boolean() , reconnect_timer :: timer_ref() | 'undefined' , recache_timer :: reference() | 'undefined' @@ -295,8 +296,9 @@ try_connect_(Opts0, S) -> case try_noise_connect(maps:merge(Opts0, PoolOpts)) of {ok, EConn, Opts1} -> S1 = protocol_connect(Opts1, S#st{ econn = EConn + , status = connecting , reconnect_timer = undefined }), - {ok, S1}; + {ok, S1#st{status = connected}}; {error, _} = Error -> Error end @@ -442,14 +444,14 @@ protocol_connect(Opts, #st{econn = EConn} = S) -> Type = to_atom(opt(type, Opts, [<<"type">>])), RId = erlang:unique_integer(), Vsns = gmhp_msgs:versions(), - %% Client = client_name(), + Client = client_name(), Protocols = gmhp_msgs:protocols(hd(Vsns)), ConnectReq = #{ protocols => Protocols , versions => Vsns , pool_id => PoolId , pubkey => Pubkey , extra_pubkeys => Extra - %% , client => Client + , client => Client , type => Type , nonces => gmhc_server:total_nonces() , signature => ""}, @@ -484,7 +486,10 @@ send_connect(EConn, RId, Msg, #{pubkey := Pubkey, notify_connected(S1#st{protocol = P, version = V, opts = Opts1}); #{error := #{code := _, message := ErrMsg}} = ErrReply -> ?LOG_ERROR("Connect error: ~s", [ErrMsg]), - disconnected(S#st.id, ErrReply, S), + %% TODO: fix the flow so that we send one disconnected event, + %% and set the reconnect in the right place. For now, stuff + %% the `reconnect = false`. + disconnected(S#st.id, ErrReply, S#st{reconnect = false}), gmhc_eureka:invalidate_cache(), error(rejected) end @@ -493,37 +498,20 @@ send_connect(EConn, RId, Msg, #{pubkey := Pubkey, error(protocol_connect_timeout) end. -%% client_name() -> -%% MyStr = app_string(gmhive_client), -%% case app_string(gajumine) of -%% <<>> -> MyStr; -%% GMStr -> <> -%% end. -%% %% {ok, Vsn} = application:get_key(gmhive_client, vsn), -%% %% maybe_add_gajumine(unicode:characters_to_binary(["gmhive_client-", Vsn])). +client_name() -> + MyStr = app_string(gmhive_client), + case app_string(gajumine) of + <<>> -> MyStr; + GMStr -> <> + end. -%% maybe_add_gajumine(Str) -> -%% case setup_zomp:is_zomp_context() of -%% true -> -%% case zx_daemon:meta() of -%% #{package_id := {"qpq","gajumine",_} = PId} -> -%% {ok, PStr} = zx_lib:package_string(PId), -%% GMStr = unicode:characters_to_binary([",", PStr]), -%% <>; -%% _ -> -%% Str -%% end; -%% false -> -%% Str -%% end. - -%% app_string(App) -> -%% case application:get_key(App, vsn) of -%% undefined -> -%% <<>>; -%% {ok, Vsn} -> -%% unicode:characters_to_binary([atom_to_binary(App),"-",Vsn]) -%% end. +app_string(App) -> + case application:get_key(App, vsn) of + undefined -> + <<>>; + {ok, Vsn} -> + unicode:characters_to_binary([atom_to_binary(App),"-",Vsn]) + end. to_bin(A) when is_atom(A) -> atom_to_binary(A, utf8); @@ -541,10 +529,11 @@ connected(Id, Type, S) when Type==worker; Type==monitor -> disconnected(Id, S) -> disconnected(Id, #{}, S). -disconnected(Id, Msg, S) -> - gmhc_events:publish(disconnected, Msg#{id => Id}), +disconnected(_, _, #st{status = disconnected} = S) -> S; +disconnected(Id, Msg, #st{reconnect = Bool} = S) -> + gmhc_events:publish(disconnected, Msg#{id => Id, reconnecting => Bool}), gmhc_server:disconnected(Id), - S#st{connected = false}. + S#st{connected = false, status = disconnected}. opt_autoconnect(#{auto_connect := Bool}) when is_boolean(Bool) -> Bool; diff --git a/zomp.meta b/zomp.meta index e4444ba..b3392e8 100644 --- a/zomp.meta +++ b/zomp.meta @@ -4,8 +4,8 @@ {prefix,"gmhc"}. {author,"Ulf Wiger, QPQ AG"}. {desc,"Gajumaru Hive Client"}. -{package_id,{"uwiger","gmhive_client",{0,9,3}}}. -{deps,[{"uwiger","gmhive_protocol",{0,2,0}}, +{package_id,{"uwiger","gmhive_client",{0,10,0}}}. +{deps,[{"uwiger","gmhive_protocol",{0,3,1}}, {"uwiger","gmhive_worker",{0,5,1}}, {"uwiger","gmcuckoo",{1,2,4}}, {"otpr","eblake2",{1,0,1}},