00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifdef HAVE_CONFIG_H
00028 # include "config.h"
00029 #endif
00030
00031 #ifdef HAVE_GETOPT
00032 # include <unistd.h>
00033 extern char* optarg;
00034 extern int optind;
00035 #else
00036 # include "getopt.h"
00037 #endif
00038
00039 #ifdef HAVE_STDLIB_H
00040 # include <stdlib.h>
00041 #endif
00042
00043 #ifdef HAVE_IOSTREAM
00044 # include <iostream>
00045 #else
00046 # include <iostream.h>
00047 #endif
00048
00049 #include <cstdio>
00050
00051 #ifdef HAVE_STD_IOSTREAM
00052 using namespace std;
00053 #endif
00054
00055 #include "CosEventChannelAdmin.hh"
00056
00057 static void usage(int argc, char **argv);
00058 static CosEventChannelAdmin::EventChannel_ptr getChannel(const char* sior);
00059
00060 CORBA::ORB_ptr orb;
00061
00062 int
00063 main(int argc, char **argv)
00064 {
00065 int result =1;
00066
00067
00068
00069 #if defined(HAVE_OMNIORB4)
00070 orb=CORBA::ORB_init(argc,argv,"omniORB4");
00071 #else
00072 orb=CORBA::ORB_init(argc,argv,"omniORB3");
00073 #endif
00074
00075
00076 int c;
00077
00078 while((c = getopt(argc,argv,"h")) != EOF)
00079 {
00080 switch (c)
00081 {
00082 case 'h': usage(argc,argv);
00083 exit(0);
00084
00085 default : usage(argc,argv);
00086 exit(-1);
00087 }
00088 }
00089
00090 if(optind!=argc-2)
00091 {
00092 usage(argc,argv);
00093 exit(-1);
00094 }
00095
00096
00097
00098
00099 const char* action ="start";
00100 try
00101 {
00102 using namespace CosEventChannelAdmin;
00103
00104 action="convert URI into reference to source channel";
00105 EventChannel_var from_channel =getChannel(argv[optind]);
00106
00107 action="convert URI into reference to destination channel";
00108 EventChannel_var to_channel =getChannel(argv[optind+1]);
00109
00110 action="obtain ConsumerAdmin";
00111 ConsumerAdmin_var cadmin =from_channel->for_consumers();
00112
00113 action="obtain ProxyPushSupplier";
00114 ProxyPushSupplier_var supplier =cadmin->obtain_push_supplier();
00115
00116 action="obtain SupplierAdmin";
00117 SupplierAdmin_var sadmin =to_channel->for_suppliers();
00118
00119 action="obtain ProxyPushConsumer";
00120 ProxyPushConsumer_var consumer =sadmin->obtain_push_consumer();
00121
00122 action="connect PushConsumer";
00123 consumer->connect_push_supplier(supplier.in());
00124
00125 action="connect PushSupplier";
00126 supplier->connect_push_consumer(consumer.in());
00127
00128
00129
00130 action="destroy orb";
00131 orb->destroy();
00132
00133
00134
00135 result=0;
00136
00137 }
00138 catch(CORBA::TRANSIENT& ex) {
00139 cerr<<"Failed to "<<action<<". TRANSIENT"<<endl;
00140 }
00141 catch(CORBA::OBJECT_NOT_EXIST& ex) {
00142 cerr<<"Failed to "<<action<<". OBJECT_NOT_EXIST"<<endl;
00143 }
00144 catch(CORBA::SystemException& ex) {
00145 cerr<<"Failed to "<<action<<".";
00146 #if defined(HAVE_OMNIORB4)
00147 cerr<<" "<<ex._name();
00148 if(ex.NP_minorString())
00149 cerr<<" ("<<ex.NP_minorString()<<")";
00150 #endif
00151 cerr<<endl;
00152 }
00153 catch(CORBA::Exception& ex) {
00154 cerr<<"Failed to "<<action<<"."
00155 #if defined(HAVE_OMNIORB4)
00156 " "<<ex._name()
00157 #endif
00158 <<endl;
00159 }
00160
00161 return result;
00162 }
00163
00164
00165 static void
00166 usage(int argc, char **argv)
00167 {
00168 cerr<<
00169 "\nConnect (federate) two event channels.\n"
00170 "syntax: "<<(argc?argv[0]:"eventf")<<" OPTIONS [FROM_CHANNEL] [TO_CHANNEL]\n"
00171 "\n"
00172 "FROM/TO_CHANNEL: The event channels must be specified as a URI.\n"
00173 " This may be an IOR, or a corbaloc::: or corbaname::: URI.\n"
00174 "\n"
00175 "OPTIONS:\n"
00176 " -h display this help text\n" << endl;
00177 }
00178
00179
00180
00181
00182 static CosEventChannelAdmin::EventChannel_ptr
00183 getChannel(const char* sior)
00184 {
00185
00186 CORBA::Object_var obj =orb->string_to_object(sior);
00187
00188
00189 CosEventChannelAdmin::EventChannel_var channel =
00190 CosEventChannelAdmin::EventChannel::_narrow(obj);
00191 if(CORBA::is_nil(channel))
00192 throw CORBA::OBJECT_NOT_EXIST();
00193
00194 return channel._retn();
00195 }