%% ---------------------------------------------------------------------------
%% @doc gen_server模板
%% @author hek
%% @since  2016-11-14
%% @deprecated
%% ---------------------------------------------------------------------------

-define(DEBUG_MODULE,   none).
-define(DEBUG_REQUEST,  none).
-define(LOCAL_DEBUG(Format, Args),
    case ?MODULE of
        ?DEBUG_MODULE -> ?PRINT(Format, Args);
        _ -> skip
    end
).
-define(LOCAL_DEBUG(Request, Format, Args),
    case {?MODULE, Request} of
        {?DEBUG_MODULE, DEBUG_REQUEST} -> ?PRINT(Format, Args);
        _ -> skip
    end
).

%% --------------------------------------------------------------------------
%% Function: init/1
%% Description: Initiates the server
%% Returns: {ok, State}          |
%%          {ok, State, Timeout} |
%%          ignore               |
%%          {stop, Reason}
%% --------------------------------------------------------------------------
-define(DO_INIT(Args),
        case catch do_init(Args) of
            {'EXIT', Reason} ->
                ?ERR("init error:~n~p~n", [Reason]),
                {stop, Reason};
            {ok, State} ->
                {ok, State};
            Other ->
                {stop, Other}
        end
).

%% --------------------------------------------------------------------------
%% Function: handle_call/3
%% Description: Handling call messages
%% Returns: {reply, Reply, State}          |
%%          {reply, Reply, State, Timeout} |
%%          {noreply, State}               |
%%          {noreply, State, Timeout}      |
%%          {stop, Reason, Reply, State}   | (terminate/2 is called)
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------------
-define(DO_HANDLE_CALL(Request, From, State),
        case catch do_handle_call(Request, From, State) of
            {'EXIT', Reason} ->
                ?ERR("handle_call error:~n~p~n", [Reason]),
                {reply, error, State};
            {reply, Reply, NewState} ->
                {reply, Reply, NewState};
            _ ->
                {reply, true, State}
        end
).

%% --------------------------------------------------------------------------
%% Function: handle_cast/2
%% Description: Handling cast messages
%% Returns: {noreply, State}          |
%%          {noreply, State, Timeout} |
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------------
-define(DO_HANDLE_CAST(Msg, State),
        case catch do_handle_cast(Msg, State) of
            {'EXIT', Reason} ->
                ?ERR("handle_cast error:~n~p~n", [Reason]),
                {noreply, State};
            {noreply, NewState} ->
                {noreply, NewState};
            {stop, normal, NewState} ->
                {stop, normal, NewState};
            _ ->
                {noreply, State}
        end
).

%% --------------------------------------------------------------------------
%% Function: handle_info/2
%% Description: Handling all non call/cast messages
%% Returns: {noreply, State}          |
%%          {noreply, State, Timeout} |
%%          {stop, Reason, State}            (terminate/2 is called)
%% --------------------------------------------------------------------------
-define(DO_HANDLE_INFO(Info, State),
        case catch do_handle_info(Info, State) of
            {'EXIT', Reason} ->
                ?ERR("handle_info error:~n~p~n", [Reason]),
                {noreply, State};
            {noreply, NewState} ->
                {noreply, NewState};
            _ ->
                {noreply, State}
        end
).

%% --------------------------------------------------------------------------
%% Function: terminate/2
%% Description: Shutdown the server
%% Returns: any (ignored by gen_server)
%% --------------------------------------------------------------------------
-define(DO_TERMINATE(Reason, State),
        case catch do_terminate(Reason, State) of
            ok -> ok;
            {'EXIT', Reason} ->
                ?ERR("terminate error:~n~p~n", [Reason]),
                {noreply, State};
            {noreply, NewState} ->
                {noreply, NewState};
            _ ->
                {noreply, State}
        end
).

%% --------------------------------------------------------------------------
%% Func: code_change/3
%% Purpose: Convert process state when code is changed
%% Returns: {ok, NewState}
%% --------------------------------------------------------------------------
-define(DO_CODE_CHANGE(OldVsn, State, Extra),
        case catch do_code_change(OldVsn, State, Extra) of
            {ok, NewState} -> {ok, NewState};
            {'EXIT', Reason} ->
                ?ERR("code_change error:~n~p~n", [Reason]),
                {ok, State};
            {noreply, NewState} ->
                {ok, NewState};
            _ ->
                {ok, State}
        end
).
