File: client.adb

package info (click to toggle)
polyorb 2.11~20140418-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 30,012 kB
  • ctags: 465
  • sloc: ada: 273,015; sh: 4,507; makefile: 4,265; python: 1,332; cpp: 1,213; java: 507; ansic: 274; xml: 30; perl: 23; exp: 6
file content (130 lines) | stat: -rw-r--r-- 4,565 bytes parent folder | download | duplicates (4)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
------------------------------------------------------------------------------
--                                                                          --
--                           POLYORB COMPONENTS                             --
--                                                                          --
--                               C L I E N T                                --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--         Copyright (C) 2002-2012, Free Software Foundation, Inc.          --
--                                                                          --
-- This is free software;  you can redistribute it  and/or modify it  under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  This software 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 and    --
-- a copy of the GCC Runtime Library Exception along with this program;     --
-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
-- <http://www.gnu.org/licenses/>.                                          --
--                                                                          --
--                  PolyORB is maintained by AdaCore                        --
--                     (email: sales@adacore.com)                           --
--                                                                          --
------------------------------------------------------------------------------

--  Echo client

with Ada.Command_Line;
with Ada.Text_IO;
with CORBA.ORB;

with Echo;

with PolyORB.Setup.Client;
pragma Warnings (Off, PolyORB.Setup.Client);

with PolyORB.Utils.Report;

procedure Client is
   use Ada.Command_Line;
   use Ada.Text_IO;
   use PolyORB.Utils.Report;
   use type CORBA.String;

   Sent_Msg, Rcvd_Msg : CORBA.String;
   myecho : Echo.Ref;

   Length : Natural := 0;
   Calls  : Natural := 1;
begin
   New_Test ("Echo client");

   CORBA.ORB.Initialize ("ORB");
   if Argument_Count not in 1 .. 3 then
      Put_Line
        ("usage: client <IOR_string_from_server>|-i [strlen [num of calls]]");
      return;
   end if;

   --  Getting the CORBA.Object

   CORBA.ORB.String_To_Object
     (CORBA.To_CORBA_String (Ada.Command_Line.Argument (1)), myecho);

   --  Get optional arguments Length and Calls

   if Argument_Count >= 2 then
      Length := Natural'Value (Ada.Command_Line.Argument (2));
   end if;

   if Argument_Count >= 3 then
      Calls := Natural'Value (Ada.Command_Line.Argument (3));
   end if;

   --  Checking if it worked

   if Echo.Is_Nil (myecho) then
      Put_Line ("main : cannot invoke on a nil reference");
      return;
   end if;

   --  Sending message

   if Length = 0 then
      Sent_Msg := CORBA.To_CORBA_String (Standard.String'("Hello Ada !"));
   else
      Sent_Msg := CORBA.To_CORBA_String
                    (Standard.String'(1 .. Length => 'X'));
   end if;

   for J in 1 .. Calls loop
      Rcvd_Msg := Echo.echoString (myecho, Sent_Msg);
   end loop;

   if Rcvd_Msg /= Sent_Msg then
      raise Program_Error with "incorrect string returned by server";
   end if;

   --  Printing result

   if Length = 0 then
      Put_Line ("I said : " & CORBA.To_Standard_String (Sent_Msg));
      Put_Line
        ("The object answered : " & CORBA.To_Standard_String (Rcvd_Msg));

   else
      Put_Line ("I said : 'X' *" & Length'Img);
      Put_Line ("The object answered the same.");
   end if;

   End_Report;

exception
   when E : CORBA.Transient =>
      Output ("echo test", False);
      declare
         Memb : CORBA.System_Exception_Members;
      begin
         CORBA.Get_Members (E, Memb);
         Put ("received exception transient, minor");
         Put (CORBA.Unsigned_Long'Image (Memb.Minor));
         Put (", completion status: ");
         Put_Line (CORBA.Completion_Status'Image (Memb.Completed));

         End_Report;
      end;
end Client;