coseventdomainapp.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 363 行
ERL
363 行
%%--------------------------------------------------------------------%% ``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 : cosEventDomainApp.erl%% Purpose : %% Created : 14 Aug 2001%%---------------------------------------------------------------------module(cosEventDomainApp).%%--------------- INCLUDES ------------------------------------include_lib("orber/include/corba.hrl").-include_lib("orber/include/ifr_types.hrl").-include_lib("cosNotification/include/CosNotification.hrl").%% Application files-include("cosEventDomainApp.hrl").-include("CosEventDomainAdmin.hrl").%%--------------- EXPORTS ------------------------------------%% External MISC-export([get_option/3, create_name/2, create_name/1, create_id/0, create_id/1, is_debug_compiled/0, install/0, uninstall/0, start_factory/0, start_factory/1, start_factory_link/0, start_factory_link/1, stop_factory/1, start/0, stop/0, create_link/3, get_qos/1, get_admin/1]).%% Application callbacks-export([start/2, init/1, stop/1]).%%--------------- DEFINES -------------------------------------define(SUPERVISOR_NAME, oe_cosEventDomainSup).-define(SUP_FLAG, {simple_one_for_one,50,10}).-define(SUP_SPEC(Name, Args), ['CosEventDomainAdmin_EventDomain',Args, [{sup_child, true}, {regname, {global, Name}}]]).-define(SUP_CHILD, {"oe_EventDomainChild", {cosEventDomainApp,create_link, []}, transient,100000,worker, ['CosEventDomainAdmin_EventDomain']}).-define(DEFAULT_OPTIONS, []).%%--------------- DEFINITIONS OF CONSTANTS -------------------%%--------------- EXTERNAL MISC FUNCTIONS --------------------%%-----------------------------------------------------------%%% function : install%% Arguments: %% Returns : %% Exception: %% Effect : %%------------------------------------------------------------install() -> oe_CosEventDomainAdmin:oe_register().%%-----------------------------------------------------------%%% function : uninstall%% Arguments: %% Returns : %% Exception: %% Effect : %%------------------------------------------------------------uninstall() -> oe_CosEventDomainAdmin:oe_unregister().%%-----------------------------------------------------------%%% function : start/stop%% Arguments: %% Returns : %% Effect : Starts or stops the cosTime application.%%------------------------------------------------------------ start() -> application:start(cosEventDomain).stop() -> application:stop(cosEventDomain). %%-----------------------------------------------------------%%% function : start%% Arguments: Type - see module application%% Arg - see module application%% Returns : %% Effect : Module callback for application%%------------------------------------------------------------ start(_, _) -> supervisor:start_link({local, ?SUPERVISOR_NAME}, cosEventDomainApp, app_init). %%-----------------------------------------------------------%%% function : stop%% Arguments: Arg - see module application%% Returns : %% Effect : Module callback for application%%------------------------------------------------------------ stop(_) -> ok. %%-----------------------------------------------------------%%% function : start_channel%% Arguments: -%% Returns : %% Effect : %%------------------------------------------------------------start_factory() -> start_factory(?DEFAULT_OPTIONS).start_factory(Options) when list(Options) -> 'CosEventDomainAdmin_EventDomainFactory':oe_create(Options);start_factory(Options) -> orber:dbg("[~p] cosEventDomainApp:start_factory(~p);~n" "Options not correct.", [?LINE, Options], ?DEBUG_LEVEL), corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}). %%-----------------------------------------------------------%%% function : start_channel%% Arguments: -%% Returns : %% Effect : %%------------------------------------------------------------start_factory_link() -> start_factory_link(?DEFAULT_OPTIONS).start_factory_link(Options) when list(Options) -> 'CosEventDomainAdmin_EventDomainFactory':oe_create_link(Options);start_factory_link(Options) -> orber:dbg("[~p] cosEventDomainApp:start_factory_link(~p);~n" "Options not correct.", [?LINE, Options], ?DEBUG_LEVEL), corba:raise(#'BAD_PARAM'{completion_status=?COMPLETED_NO}). %%-----------------------------------------------------------%%% function : stop_factory%% Arguments: ChannelObj%% Returns : %% Effect : %%------------------------------------------------------------stop_factory(ChannelObj) -> corba:dispose(ChannelObj).%%-----------------------------------------------------------%%% 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 : 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 : create_name/2%% Arguments: %% Returns : %% Exception: %% Effect : %%------------------------------------------------------------ create_name(Name,Type) -> {MSec, Sec, USec} = erlang:now(), lists:concat(['oe_',node(),'_',Type,'_',Name,'_',MSec, '_', Sec, '_', USec]). %%-----------------------------------------------------------%%% function : create_name/1%% Arguments: %% Returns : %% Exception: %% Effect : %%------------------------------------------------------------create_name(Type) -> {MSec, Sec, USec} = erlang:now(), lists:concat(['oe_',node(),'_',Type,'_',MSec, '_', Sec, '_', USec]).%%------------------------------------------------------------%% function : create_id/0%% Arguments: - %% Returns : CosEventDomainAdmin::DomainID (long)%% Exception: %% Purpose : %%------------------------------------------------------------create_id(2147483647) -> -2147483648;create_id(OldID) -> OldID+1.create_id() -> {_A,_B,C}=now(), C.%%------------------------------------------------------------%% function : get_qos%% Arguments: %% Returns : %% Exception: %% Effect : %%------------------------------------------------------------get_qos([]) -> [];get_qos(Properties) -> get_qos(Properties, [], []).get_qos([], Supported, []) -> Supported;get_qos([], _, Unsupported) -> corba:raise(#'CosNotification_UnsupportedQoS'{qos_err = Unsupported});get_qos([#'CosNotification_Property'{name = ?CycleDetection, value= #any{value = ?AuthorizeCycles}}|T], Supported, Unsupported) -> get_qos(T, [{?CycleDetection, ?AuthorizeCycles}|Supported], Unsupported);get_qos([#'CosNotification_Property'{name = ?CycleDetection, value= #any{value = ?ForbidCycles}}|T], Supported, Unsupported) -> get_qos(T, [{?CycleDetection, ?ForbidCycles}|Supported], Unsupported);get_qos([#'CosNotification_Property'{name = ?CycleDetection}|T], Supported, Unsupported) -> %% Illegal value supplied. get_qos(T, Supported, [#'CosNotification_PropertyError' {code = 'UNSUPPORTED_VALUE', name = ?CycleDetection, available_range = #'CosNotification_PropertyRange' {low_val=any:create(orber_tc:short(), ?AuthorizeCycles), high_val=any:create(orber_tc:short(), ?ForbidCycles)}}|Unsupported]);get_qos([#'CosNotification_Property'{name = ?DiamondDetection, value= #any{value = ?AuthorizeDiamonds}}|T], Supported, Unsupported) -> get_qos(T, [{?DiamondDetection, ?AuthorizeDiamonds}|Supported], Unsupported);get_qos([#'CosNotification_Property'{name = ?DiamondDetection, value= #any{value = ?ForbidDiamonds}}|T], Supported, Unsupported) -> get_qos(T, [{?DiamondDetection, ?ForbidDiamonds}|Supported], Unsupported);get_qos([#'CosNotification_Property'{name = ?DiamondDetection}|T], Supported, Unsupported) -> %% Illegal value supplied. get_qos(T, Supported, [#'CosNotification_PropertyError' {code = 'UNSUPPORTED_VALUE', name = ?DiamondDetection, available_range = #'CosNotification_PropertyRange' {low_val=any:create(orber_tc:short(), ?AuthorizeDiamonds), high_val=any:create(orber_tc:short(), ?ForbidDiamonds) }} | Unsupported]);get_qos([#'CosNotification_Property'{name = Name}|T], Supported, Unsupported) -> %% Unknown QoS supplied. get_qos(T, Supported, [#'CosNotification_PropertyError' {code = 'BAD_PROPERTY', name = Name, available_range = #'CosNotification_PropertyRange' {low_val=any:create(orber_tc:null(), null), high_val=any:create(orber_tc:null(), null)}} | Unsupported]).%%------------------------------------------------------------%% function : get_admin%% Arguments: %% Returns : {"EXCEPTION', #'CosNotification_PropertyError'{}}%% Exception: %% Effect : No Admin supported.%%------------------------------------------------------------get_admin([]) -> [];get_admin(Properties) -> get_admin(Properties, []).get_admin([], Unsupported) -> corba:raise(#'CosNotification_UnsupportedAdmin'{admin_err = Unsupported});get_admin([#'CosNotification_Property'{name = Name}|T], Unsupported) -> %% Unknown QoS supplied. get_admin(T, [#'CosNotification_PropertyError' {code = 'BAD_PROPERTY', name = Name, available_range = #'CosNotification_PropertyRange' {low_val=any:create(orber_tc:null(), null), high_val=any:create(orber_tc:null(), null)}} | Unsupported]).%%------------------------------------------------------------%% function : is_debug_compiled%% Arguments: %% Returns : %% Exception: %% Effect : %%-------------------------------------------------------------ifdef(debug). is_debug_compiled() -> true.-else. is_debug_compiled() -> false.-endif. %%--------------- END OF MODULE ------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?