cosnotifychanneladmin_eventchannelfactory_impl.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 142 行

ERL
142
字号
%%--------------------------------------------------------------------%% ``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    : CosNotifyChannelAdmin_EventChannelFactory_impl.erl%% Purpose : %% Created : 28 Sep 1999%%--------------------------------------------------------------------module('CosNotifyChannelAdmin_EventChannelFactory_impl').%%--------------- INCLUDES -----------------------------------%% Application files-include_lib("orber/include/corba.hrl").-include_lib("orber/include/ifr_types.hrl").%% Application files-include("CosNotification.hrl").-include("CosNotifyChannelAdmin.hrl").-include("CosNotifyComm.hrl").-include("CosNotifyFilter.hrl").-include("CosNotification_Definitions.hrl").%%--------------- IMPORTS ------------------------------------%%--------------- EXPORTS ------------------------------------%% External-export([create_channel/5,	 get_all_channels/3,	 get_event_channel/4]).%%--------------- gen_server specific exports -----------------export([handle_info/2, code_change/3]).-export([init/1, terminate/2]).%%--------------- LOCAL DEFINITIONS --------------------------%% Data structures-record(state, {adminProp,		idCounter = 0,		options,		etsR,		server_options}).%%-----------------------------------------------------------%%% function : handle_info, code_change%% Arguments: See gen_server documentation.%% Effect   : Functions demanded by the gen_server module. %%------------------------------------------------------------code_change(_OldVsn, State, _Extra) ->    {ok, State}.handle_info(Info, State) ->    ?debug_print("INFO: ~p~n", [Info]),    case Info of        {'EXIT', Pid, normal} ->	    ets:match_delete(State#state.etsR, {'_','_',Pid}),            {noreply, State};        _Other ->            ?debug_print("TERMINATED: ~p~n",[_Other]),            {noreply, State}    end.%%----------------------------------------------------------%%% function : init, terminate%% Arguments: %%-----------------------------------------------------------init(Options) ->    process_flag(trap_exit, true),    SO = 'CosNotification_Common':get_option(server_options, Options, ?not_DEFAULT_SETTINGS),    {ok, #state{options = Options,		etsR    = ets:new(oe_ets, [set, protected]),		server_options = SO}}.terminate(_Reason, _State) ->    ok.%%-----------------------------------------------------------%%------- Exported external functions -----------------------%%-----------------------------------------------------------%%----------------------------------------------------------%%% function : create_channel%% Arguments: InitQoS%%            InitAdmin%% Returns  : Ch - Channel obj ref%%            Id - Channel Id (out-type)%%-----------------------------------------------------------create_channel(OE_THIS, _OE_FROM, State, InitQoS, InitAdmin) ->    {QoS, LQoS} = 'CosNotification_Common':init_qos(InitQoS),    {IAdm, LAdm} = 'CosNotification_Common':init_adm(InitAdmin),    Id = 'CosNotification_Common':create_id(State#state.idCounter),    case 'CosNotifyChannelAdmin_EventChannel':oe_create_link([OE_THIS, QoS, IAdm, 							      LQoS, LAdm, 							      State#state.options],							     [{sup_child, true}|State#state.server_options]) of	{ok, Pid, Ch} ->	    ets:insert(State#state.etsR, {Id,Ch,Pid}),	    {reply, {Ch, Id}, State#state{idCounter=Id}};	_ ->	    corba:raise(#'INTERNAL'{completion_status=?COMPLETED_NO})    end.%%----------------------------------------------------------%%% function : get_all_channels%% Arguments: -%% Returns  : ChannelIDSeq - List of alive channels created %%            by this factory.%%-----------------------------------------------------------get_all_channels(_OE_THIS, _OE_FROM, State) ->    {reply, lists:flatten(ets:match(State#state.etsR, {'$1','_','_'})), State}.%%----------------------------------------------------------%%% function : get_event_channel%% Arguments: ChannelId%% Returns  : ChannelRef | 'CosNotifyChannelAdmin_ChannelNotFound'%%-----------------------------------------------------------get_event_channel(_OE_THIS, _OE_FROM, State, Id) ->    {reply, find_obj(ets:lookup(State#state.etsR, Id)), State}.%%--------------- LOCAL FUNCTIONS ----------------------------find_obj([]) -> {'EXCEPTION', #'CosNotifyChannelAdmin_ChannelNotFound'{}};find_obj([{_, Obj,_}]) -> Obj;find_obj(_) -> {'EXCEPTION', #'CosNotifyChannelAdmin_ChannelNotFound'{}}.%%--------------- MISC FUNCTIONS, E.G. DEBUGGING -------------%%--------------- END OF MODULE ------------------------------

⌨️ 快捷键说明

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