File: echo_dynimpl.adb

package info (click to toggle)
polyorb 2.6.0~20090423-10
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 25,004 kB
  • ctags: 240
  • sloc: ada: 236,464; makefile: 2,281; sh: 1,373; cpp: 957; java: 500; ansic: 198; python: 191; perl: 23; exp: 6
file content (91 lines) | stat: -rw-r--r-- 3,826 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
------------------------------------------------------------------------------
--                                                                          --
--                           POLYORB COMPONENTS                             --
--                                                                          --
--                         E C H O _ D Y N I M P L                          --
--                                                                          --
--                                 B o d 8                                  --
--                                                                          --
--         Copyright (C) 2004-2008, Free Software Foundation, Inc.          --
--                                                                          --
-- PolyORB is free software; you  can  redistribute  it and/or modify it    --
-- under terms of the  GNU General Public License as published by the  Free --
-- Software Foundation;  either version 2,  or (at your option)  any  later --
-- version. PolyORB is distributed  in the hope that it will be  useful,    --
-- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
-- License  for more details.  You should have received  a copy of the GNU  --
-- General Public License distributed with PolyORB; see file COPYING. If    --
-- not, write to the Free Software Foundation, 51 Franklin Street, Fifth    --
-- Floor, Boston, MA 02111-1301, USA.                                       --
--                                                                          --
--                                                                          --
--                  PolyORB is maintained by AdaCore                        --
--                     (email: sales@adacore.com)                           --
--                                                                          --
------------------------------------------------------------------------------

with CORBA.NVList;
with CORBA.ORB;

package body Echo_DynImpl is

   ------------
   -- Invoke --
   ------------

   procedure Invoke
     (Self    : access Object;
      Request : CORBA.ServerRequest.Object_Ptr)
   is
      pragma Unreferenced (Self);

      Operation : constant Standard.String
        := CORBA.To_Standard_String
        (CORBA.ServerRequest.Operation (Request.all));

   begin
      if Operation = "echoString" then
         declare
            Mesg          : CORBA.String;
            Arg_Name_Mesg : constant CORBA.Identifier :=
                              CORBA.To_CORBA_String ("Mesg");
            Argument_Mesg : constant CORBA.Any := CORBA.To_Any (Mesg);

            Result          : CORBA.String;
            Argument_Result : CORBA.Any;
            Arg_List        : CORBA.NVList.Ref;
         begin
            --  Create argument list

            CORBA.ORB.Create_List (0, Arg_List);
            CORBA.NVList.Add_Item (Arg_List,
                                   Arg_Name_Mesg,
                                   Argument_Mesg,
                                   CORBA.ARG_IN);

            CORBA.ServerRequest.Arguments (Request, Arg_List);

            begin
               --  Convert arguments from their Any

               Mesg := CORBA.From_Any (Argument_Mesg);

               --  Actual implementation of the echoString function:
               --  simply return the argument

               Result := Mesg;
            end;

            --  Set Result

            Argument_Result := CORBA.To_Any (Result);
            CORBA.ServerRequest.Set_Result (Request, Argument_Result);
            return;
         end;
      end if;

      CORBA.Raise_Bad_Operation (CORBA.Default_Sys_Member);
   end Invoke;

end Echo_DynImpl;