%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 1999-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% -module(orber_test_server_impl). -include_lib("orber/include/corba.hrl"). -include("idl_output/orber_test_server.hrl"). %%--------------- specified functions ------------------------ -export([stop_normal/2, stop_brutal/2, print/2, %% Testing code and decode arguments testing_iiop_float/3, testing_iiop_double/3, testing_iiop_short/3, testing_iiop_ushort/3, testing_iiop_long/3, testing_iiop_longlong/3, testing_iiop_ulong/3, testing_iiop_ulonglong/3, testing_iiop_char/3, testing_iiop_wchar/3, testing_iiop_bool/3, testing_iiop_octet/3, testing_iiop_any/3, testing_iiop_obj/3, testing_iiop_string/3, testing_iiop_wstring/3, testing_iiop_struct/3, testing_iiop_union/3, testing_iiop_union_d/3, testing_iiop_enum/3, testing_iiop_seq/3, testing_iiop_uni_seq/3, testing_iiop_struc_seq/3, testing_iiop_array/3, testing_iiop_fixed/3, testing_iiop_void/2, testing_iiop_context/2, testing_iiop_server_marshal/3, testing_iiop_rec_any/3, testing_iiop_rec_struct/3, testing_iiop_rec_union/3, relay_call/3, relay_cast/3, %% Testing pseudo calls. pseudo_call/2, pseudo_cast/2, pseudo_call_delay/3, pseudo_cast_delay/3, pseudo_call_raise_exc/3, %% Testing raise locally defined exception. raise_local_exception/2, raise_complex_local_exception/2, %% Test timeout functionality testing_iiop_oneway_delay/3, testing_iiop_twoway_delay/3]). %%--------------- gen_server specific ------------------------ -export([init/1, terminate/2]). -export([handle_call/3, handle_cast/2, handle_info/2, code_change/3]). %%--------------- LOCAL DATA --------------------------------- %%------------------------------------------------------------ %% function : init, terminate %%------------------------------------------------------------ init(State) -> process_flag(trap_exit,true), {ok, State}. terminate(Reason, State) -> io:format("orber_test_server:terminate(~p ~p)~n",[Reason, State]), ok. code_change(_OldVsn, State, _Extra) -> {ok, State}. handle_call(_,_, State) -> {noreply, State}. handle_cast(_, State) -> {noreply, State}. handle_info(_Info, State) -> {noreply, State}. %%--------------- SERVER FUNCTIONS --------------------------- print(Self, State) -> io:format("orber_test_server:print(~p ~p)~n",[Self, State]), {reply, ok, State}. stop_normal(_Self, State) -> {stop, normal, ok, State}. stop_brutal(_Self, _State) -> exit("killed_brutal"). %% Testing code and decode arguments testing_iiop_float(_Self, State, Float) -> {reply, {ok, Float}, State}. testing_iiop_double(_Self, State, Double) -> {reply, {ok, Double}, State}. testing_iiop_short(_Self, State, Short) -> {reply, {ok, Short}, State}. testing_iiop_ushort(_Self, State, Ushort) -> {reply, {ok, Ushort}, State}. testing_iiop_long(_Self, State, Long) -> {reply, {ok, Long}, State}. testing_iiop_longlong(_Self, State, LLong) -> {reply, {ok, LLong}, State}. testing_iiop_ulong(_Self, State, Ulong) -> {reply, {ok, Ulong}, State}. testing_iiop_ulonglong(_Self, State, ULlong) -> {reply, {ok, ULlong}, State}. testing_iiop_char(_Self, State, Char) -> {reply, {ok, Char}, State}. testing_iiop_wchar(_Self, State, WChar) -> {reply, {ok, WChar}, State}. testing_iiop_bool(_Self, State, Boolean) -> {reply, {ok, Boolean}, State}. testing_iiop_octet(_Self, State, Octet) -> {reply, {ok, Octet}, State}. testing_iiop_any(_Self, State, Any) -> {reply, {ok, Any}, State}. testing_iiop_obj(_Self, State, Obj) -> {reply, {ok, Obj}, State}. testing_iiop_string(_Self, State, String) -> {reply, {ok, String}, State}. testing_iiop_wstring(_Self, State, WString) -> {reply, {ok, WString}, State}. testing_iiop_struct(_Self, State, Struct) -> {reply, {ok, Struct}, State}. testing_iiop_union(_Self, State, Union) -> {reply, {ok, Union}, State}. testing_iiop_union_d(_Self, State, Union) -> {reply, {ok, Union}, State}. testing_iiop_enum(_Self, State, Enum) -> {reply, {ok, Enum}, State}. testing_iiop_seq(_Self, State, Sequence) -> {reply, {ok, Sequence}, State}. testing_iiop_uni_seq(_Self, State, Sequence) -> {reply, {ok, Sequence}, State}. testing_iiop_struc_seq(_Self, State, Sequence) -> {reply, {ok, Sequence}, State}. testing_iiop_array(_Self, State, Array) -> {reply, {ok, Array}, State}. testing_iiop_fixed(_Self, State, Fixed) -> {reply, {ok, Fixed}, State}. testing_iiop_void(_Self, State) -> {reply, ok, State}. testing_iiop_context(_Self, State) -> Ctx = get(oe_server_in_context), io:format("orber_test_server:testing_iiop_context( ~p )~n", [Ctx]), {reply, ok, State}. testing_iiop_server_marshal(_Self, State, _String) -> {reply, {ok, false}, State}. testing_iiop_rec_any(_Self, State, RAny) -> {reply, RAny, State}. testing_iiop_rec_struct(_Self, State, RecS) -> {reply, RecS, State}. testing_iiop_rec_union(_Self, State, RecU) -> {reply, RecU, State}. testing_iiop_oneway_delay(_Self, State, Time) -> timer:sleep(Time), {noreply, State}. testing_iiop_twoway_delay(_Self, State, Time) -> timer:sleep(Time), {reply, ok, State}. raise_local_exception(_Self, State) -> corba:raise(#'orber_test_server_UserDefinedException'{}), {reply, ok, State}. raise_complex_local_exception(_Self, State) -> corba:raise(#'orber_test_server_ComplexUserDefinedException'{strseq= [#orber_test_server_struc{a=1, b=2}]}), {reply, ok, State}. %% Testing relay calls/casts to, for example, test that sending implicit %% Contexts works. relay_call(_Self, State, Target) -> io:format("orber_test_server:relay_call( ~p ) Pre~n", [get(oe_server_in_context)]), orber_test_server:testing_iiop_context(Target), io:format("orber_test_server:relay_call( ~p ) Post~n", [get(oe_server_in_context)]), {reply, ok, State}. relay_cast(_Self, State, Target) -> io:format("orber_test_server:relay_cast( ~p ) Pre~n", [get(oe_server_in_context)]), orber_test_server:testing_iiop_context(Target), io:format("orber_test_server:relay_cast( ~p ) Post~n", [get(oe_server_in_context)]), {noreply, State}. %% Testing pseudo calls. pseudo_call(_Self, State) -> io:format("orber_test_server:pseudo_call( ~p )~n", [erlang:timestamp()]), {reply, ok, State}. pseudo_cast(_Self, State) -> io:format("orber_test_server:pseudo_cast( ~p )~n", [erlang:timestamp()]), {noreply, State}. pseudo_call_delay(_Self, State, Time) -> io:format("orber_test_server:pseudo_call_delay( ~p )~n", [erlang:timestamp()]), timer:sleep(Time), io:format("orber_test_server:pseudo_call_delay( ~p )~n", [erlang:timestamp()]), {reply, {ok, Time}, State}. pseudo_cast_delay(_Self, State, Time) -> io:format("orber_test_server:pseudo_cast_delay( ~p )~n", [erlang:timestamp()]), timer:sleep(Time), io:format("orber_test_server:pseudo_cast_delay( ~p )~n", [erlang:timestamp()]), {noreply, State}. pseudo_call_raise_exc(_Self, State, 1) -> io:format("orber_test_server:pseudo_call_raise_exc( ~p )~n",[1]), {reply, {'EXCEPTION', #'BAD_QOS'{completion_status=?COMPLETED_NO}}, State}; pseudo_call_raise_exc(_Self, State, 2) -> io:format("orber_test_server:pseudo_call_raise_exc( ~p )~n",[2]), corba:raise(#'BAD_QOS'{completion_status=?COMPLETED_NO}), {reply, ok, State}. %%--------------- LOCAL FUNCTIONS ---------------------------- %%--------------- END OF MODULE ------------------------------