⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 costime.erl

📁 OTP是开放电信平台的简称
💻 ERL
字号:
%%--------------------------------------------------------------------%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %%     $Id$%%%%----------------------------------------------------------------------%% File    : cosTime.erl%% Purpose : %% Created : 10 Feb 2000%%-----------------------------------------------------------------------module(cosTime). %%--------------- INCLUDES ------------------------------------include("cosTimeApp.hrl").%%--------------- EXPORTS-------------------------------------%% cosTime API external-export([start/0, stop/0, 	 install_time/0, uninstall_time/0,	 install_timerevent/0, uninstall_timerevent/0, 	 start_time_service/2, start_timerevent_service/1, stop_timerevent_service/1,	 stop_time_service/1]).%% cosTime API internal-export([create_link/3, get_option/3, type_check/2, start_event_handler/1]). %% Application callbacks-export([start/2, init/1, stop/1]).%%--------------- DEFINES -------------------------------------define(IDL_TIME_MODULES, ['oe_TimeBase', 			   'oe_CosTime']).-define(IDL_TIMEREVENT_MODULES, ['oe_CosTimerEvent']).-define(SUPERVISOR_NAME, oe_cosTimeSup).-define(SUP_FLAG,        {simple_one_for_one,50,10}).-define(SUP_TIMESERVICE_SPEC(T,I),         ['CosTime_TimeService',[T, I],          [{sup_child, true}, {regname, {global, "oe_cosTimeService"}}]]).-define(SUP_TIMEREVENTSERVICE_SPEC(Args),         ['CosTimerEvent_TimerEventService', Args,          [{sup_child, true}, {regname, {local, 'oe_cosTimerEventService'}}]]).-define(SUP_TIMEREVENTHANDLER_SPEC(Name, Args),         ['CosTimerEvent_TimerEventHandler',Args,          [{sup_child, true}, {regname, {global, Name}}]]).-define(SUP_CHILD,         {"oe_TimeChild",         {cosTime,create_link, []},	 transient,100000,worker,         []}).%%------------------------------------------------------------%% function : install_*/X%% Arguments: - | Time (seconds)%% Returns  : ok | EXIT | EXCEPTION%% Effect   : Install necessary data in the IFR DB%%------------------------------------------------------------install_time() ->     install_loop(?IDL_TIME_MODULES,[]).install_timerevent() ->     install_loop(?IDL_TIMEREVENT_MODULES,[]).install_loop([], _) ->    ok;install_loop([H|T], Accum) ->    case catch H:'oe_register'() of	{'EXIT',{unregistered,App}} ->	    ?write_ErrorMsg("Unable to register '~p'; application ~p not registered.Trying to unregister ~p~n", [H,App,Accum]),	    uninstall_loop(Accum, {exit, register});	{'EXCEPTION',_} ->	    ?write_ErrorMsg("Unable to register '~p'; propably already registered.You are adviced to confirm this.Trying to unregister ~p~n", [H,Accum]),	    uninstall_loop(Accum, {exit, register});	ok ->	    install_loop(T, [H|Accum]);	_ ->	    ?write_ErrorMsg("Unable to register '~p'; reason unknown.Trying to unregister ~p~n", [H,Accum]),	    uninstall_loop(Accum, {exit, register})    end.%%------------------------------------------------------------%% function : uninstall_*/X%% Arguments: - | Time (seconds)%% Returns  : ok | EXIT | EXCEPTION%% Effect   : Remove data related to cosTime from the IFR DB%%------------------------------------------------------------uninstall_time() ->     uninstall_loop(lists:reverse(?IDL_TIME_MODULES),ok).uninstall_timerevent() ->     uninstall_loop(lists:reverse(?IDL_TIMEREVENT_MODULES),ok).uninstall_loop([],ok) ->    ok;uninstall_loop([],{exit, register}) ->    exit({?MODULE, "oe_register failed"});uninstall_loop([],{exit, unregister}) ->    exit({?MODULE, "oe_unregister failed"});uninstall_loop([],{exit, both}) ->    exit({?MODULE, "oe_register and, for some of those already registered, oe_unregister failed"});uninstall_loop([H|T], Status) ->    case catch H:'oe_unregister'() of	ok ->	    uninstall_loop(T, Status);	_ when Status == ok ->	    ?write_ErrorMsg("Unable to unregister '~p'; propably already unregistered.You are adviced to confirm this.~n",[H]),	    uninstall_loop(T, {exit, unregister});	_ ->	    ?write_ErrorMsg("Unable to unregister '~p'; propably already unregistered.You are adviced to confirm this.~n",[H]),	    uninstall_loop(T, {exit, both})    end.	%%------------------------------------------------------------%% function : start/stop%% Arguments: %% Returns  : %% Effect   : Starts or stops the cosTime application.%%------------------------------------------------------------ start() ->    application:start(cosTime).stop() ->    application:stop(cosTime). %%------------------------------------------------------------%% function : start%% Arguments: Type - see module application%%            Arg  - see module application%% Returns  : %% Effect   : Module callback for application%%------------------------------------------------------------ start(_, _) ->    supervisor:start_link({local, ?SUPERVISOR_NAME}, cosTime, app_init).  %%------------------------------------------------------------%% function : stop%% Arguments: Arg - see module application%% Returns  : %% Effect   : Module callback for application%%------------------------------------------------------------ stop(_) ->    ok. %%------------------------------------------------------------%% function : start_time_service%% Arguments: Tdf - time difference to UTC%%            Inaccuracy - ulonglong%%            Upper - inaccuracy high%% Returns  : %% Effect   : %%------------------------------------------------------------start_time_service(Tdf, Inaccuracy) when integer(Tdf), integer(Inaccuracy) ->    case supervisor:start_child(?SUPERVISOR_NAME, 				?SUP_TIMESERVICE_SPEC(Tdf, Inaccuracy)) of	{ok, Pid, Obj} when pid(Pid) ->	    Obj;	_Other->	    corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})    end;start_time_service(_Tdf, _Inaccuracy) ->    corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}).    %%------------------------------------------------------------%% function : stop_time_service%% Arguments: Obj - TimeService objref%% Returns  : %% Effect   : %%------------------------------------------------------------stop_time_service(Obj) ->    corba:dispose(Obj).%%------------------------------------------------------------%% function : start_timerevent_service%% Arguments: Timer - Timer Service Reference%% Returns  : %% Effect   : %%------------------------------------------------------------start_timerevent_service(Timer) ->    case supervisor:start_child(?SUPERVISOR_NAME, 				?SUP_TIMEREVENTSERVICE_SPEC([Timer])) of	{ok, Pid, Obj} when pid(Pid) ->	    Obj;	_Other->	    corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})    end.%%-----------------------------------------------------------%%% function : stop_timerevent_service%% Arguments: Obj - TimerEventService objref%% Returns  : %% Effect   : %%------------------------------------------------------------stop_timerevent_service(Obj) ->    corba:dispose(Obj).%%-----------------------------------------------------------%%% function : init%% Arguments: %% Returns  : %% Effect   : %%------------------------------------------------------------ %% Starting using create_factory/Xinit(own_init) ->    {ok,{?SUP_FLAG, [?SUP_CHILD]}};%% When starting as an application.init(app_init) ->    {ok,{?SUP_FLAG, [?SUP_CHILD]}}. %%-----------------------------------------------------------%%% function : create_link%% Arguments: Module - which Module to call%%            Env/ArgList - ordinary oe_create arguments.%% Returns  : %% Exception: %% Effect   : Necessary since we want the supervisor to be a %%            'simple_one_for_one'. Otherwise, using for example,%%            'one_for_one', we have to call supervisor:delete_child%%            to remove the childs startspecification from the %%            supervisors internal state.%%------------------------------------------------------------create_link(Module, Env, ArgList) ->    Module:oe_create_link(Env, ArgList).%%-----------------------------------------------------------%%% function : start_event_handler%% Arguments: %% Returns  : %% Exception: %% Effect   : %%------------------------------------------------------------start_event_handler(Args) ->    Name = create_name(eventhandler),    case supervisor:start_child(?SUPERVISOR_NAME, ?SUP_TIMEREVENTHANDLER_SPEC(Name,Args)) of	{ok, Pid, Obj} when pid(Pid) ->	    Obj;	_Other->	    corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})    end.   %%-----------------------------------------------------------%%% function : get_option%% Arguments: %% Returns  : %% Exception: %% Effect   : %%------------------------------------------------------------get_option(Key, OptionList, DefaultList) ->    case lists:keysearch(Key, 1, OptionList) of        {value,{Key,Value}} ->            Value;        _ ->            case lists:keysearch(Key, 1, DefaultList) of                {value,{Key,Value}} ->                    Value;                _->                    {error, "Invalid option"}            end    end.%%-----------------------------------------------------------%%% function : type_check%% Arguments: Obj  - objectrefernce to test.%%            Mod  - Module which contains typeID/0.%% Returns  : 'ok' or raises exception.%% Effect   : %%------------------------------------------------------------type_check(Obj, Mod) ->    case catch corba_object:is_a(Obj,Mod:typeID()) of        true ->            ok;        _ ->	    corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO})    end.%%-----------------------------------------------------------%%% function : create_name/1%% Arguments: %% Returns  : %% Exception: %% Effect   : %%------------------------------------------------------------ create_name(Type) ->    {MSec, Sec, USec} = erlang:now(),    lists:concat(['oe_',node(),'_',Type,'_',MSec, '_', Sec, '_', USec]).%%--------------- END OF MODULE ------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -