private static void InvalidLogin(Connection conn, LoginInfo login)
        {
            bool failed = true;

            do
            {
                try {
                    // Faz o login
                    conn.LoginByPassword(_entity, _password, _domain);
                    failed = false;
                }
                // Login
                catch (AlreadyLoggedInException) {
                    // Ignora o erro
                    failed = false;
                }
                catch (AccessDenied) {
                    Console.WriteLine(Resources.ServerAccessDenied);
                }
                catch (MissingCertificate) {
                    Console.WriteLine(Resources.MissingCertificateForEntity + _entity);
                }
                // Barramento
                catch (ServiceFailure e) {
                    Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                    Console.WriteLine(e);
                }
                catch (TRANSIENT) {
                    Console.WriteLine(Resources.BusTransientErrorMsg);
                }
                catch (COMM_FAILURE) {
                    Console.WriteLine(Resources.BusCommFailureErrorMsg);
                }
                catch (Exception e) {
                    NO_PERMISSION npe = null;
                    if (e is TargetInvocationException)
                    {
                        // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                        npe = e.InnerException as NO_PERMISSION;
                    }
                    if ((npe == null) && (!(e is NO_PERMISSION)))
                    {
                        // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                        throw;
                    }
                    npe = npe ?? (NO_PERMISSION)e;
                    if (npe.Minor == NoLoginCode.ConstVal)
                    {
                        Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                    }
                    else
                    {
                        throw;
                    }
                }
            } while (failed);
            _finder.Activate();
        }
Beispiel #2
0
        /// <inheritdoc />
        public void send_exception(ServerRequestInfo ri)
        {
            // esse tratamento precisa ser feito aqui (não é possível na receive_request) por causa de bugs do IIOP.net, descritos em OPENBUS-1677.
            String interceptedOperation = ri.operation;

            Logger.Info(String.Format(
                            "O lançamento de uma exceção para a operação '{0}' foi interceptado no servidor.",
                            interceptedOperation), (Exception)ri.sending_exception);

            NO_PERMISSION ex = ri.sending_exception as NO_PERMISSION;

            if (ex == null)
            {
                return;
            }
            if (ex.Minor == InvalidCredentialCode.ConstVal)
            {
                try {
                    // pela implementação do IIOP.Net, o ServerRequestInfo da send_exception é
                    // diferente do existente na receive_request. Assim, não podemos passar a
                    // credencial por um slot e então precisamos fazer o unmarshal novamente.
                    ConnectionImpl conn =
                        ri.get_slot(ReceivingConnectionSlotId) as ConnectionImpl;
                    if (conn == null)
                    {
                        Logger.Error(
                            "Sem conexão ao barramento, impossível enviar exceção à chamada remota.");
                        throw new NO_PERMISSION(UnverifiedLoginCode.ConstVal,
                                                CompletionStatus.Completed_No);
                    }
                    bool           legacyContext;
                    ServiceContext serviceContext =
                        GetContextFromRequestInfo(ri, conn.Legacy, out legacyContext);
                    // credencial é inválida
                    AnyCredential anyCredential = new AnyCredential(serviceContext,
                                                                    legacyContext);
                    Logger.Debug(String.Format(
                                     "A operação '{0}' para a qual será lançada a exceção possui credencial. Legada? {1}.",
                                     interceptedOperation, anyCredential.Legacy));

                    conn.SendException(ri, anyCredential);
                }
                catch (InvalidSlot e) {
                    Logger.Fatal(
                        "Falha ao acessar o slot da conexão de recebimento para enviar uma exceção.",
                        e);
                    throw;
                }
            }
        }
        private static Connection NewLogin()
        {
            Connection conn = ORBInitializer.Context.ConnectByAddress(_host, _port);

            try {
                // Faz o login
                conn.LoginByPassword(_entity, _password, _domain);
            }
            catch (AccessDenied) {
                Console.WriteLine(Resources.ClientAccessDenied + _entity + ".");
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }
            return(conn);
        }
Beispiel #4
0
 private static void RemoveOfferAndLogout()
 {
     if (Offers.Count > 0)
     {
         foreach (KeyValuePair <Connection, ServiceOffer> pair in Offers)
         {
             try {
                 Console.WriteLine(Resources.RemovingOffer);
                 pair.Value.remove();
                 Console.WriteLine(Resources.RemovedOffer);
             }
             catch (UnauthorizedOperation) {
                 Console.WriteLine(Resources.UnauthorizedRemoveOffer);
             }
             catch (ServiceFailure e) {
                 Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                 Console.WriteLine(e);
             }
             catch (TRANSIENT) {
                 Console.WriteLine(Resources.BusTransientErrorMsg);
             }
             catch (COMM_FAILURE) {
                 Console.WriteLine(Resources.BusCommFailureErrorMsg);
             }
             catch (Exception e) {
                 NO_PERMISSION npe = null;
                 if (e is TargetInvocationException)
                 {
                     // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                     npe = e.InnerException as NO_PERMISSION;
                 }
                 if ((npe == null) && (!(e is NO_PERMISSION)))
                 {
                     // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                     throw;
                 }
                 npe = npe ?? (NO_PERMISSION)e;
                 if (npe.Minor == NoLoginCode.ConstVal)
                 {
                     Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                 }
                 else
                 {
                     throw;
                 }
             }
             Connection conn = pair.Key;
             if (conn.Login.HasValue)
             {
                 try {
                     conn.Logout();
                 }
                 catch (ServiceFailure e) {
                     Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                     Console.WriteLine(e);
                 }
                 catch (TRANSIENT) {
                     Console.WriteLine(Resources.BusTransientErrorMsg);
                 }
                 catch (COMM_FAILURE) {
                     Console.WriteLine(Resources.BusCommFailureErrorMsg);
                 }
             }
         }
     }
 }
Beispiel #5
0
        private static void Main(String[] args)
        {
            // Registra handler para o caso do processo ser finalizado
            AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit;

            // Obtém dados através dos argumentos
            string host   = args[0];
            ushort port   = Convert.ToUInt16(args[1]);
            string entity = args[2];
            AsymmetricCipherKeyPair privateKey = Crypto.ReadKeyFile(args[3]);

            // Cria o componente que conterá as facetas do servidor
            ORBInitializer.InitORB();
            ComponentContext component =
                new DefaultComponentContext(new ComponentId("messenger", 1, 0, 0, ".net"));

            // Cria a faceta Messenger para o componente
            component.AddFacet("Messenger",
                               Repository.GetRepositoryID(typeof(Messenger)),
                               new MessengerImpl(entity));

            // Define propriedades para a oferta de serviço a ser registrada no barramento
            IComponent ic = component.GetIComponent();

            ServiceProperty[] properties =
            {
                new ServiceProperty("offer.domain",
                                    "Demo CallChain"),
                new ServiceProperty("offer.role",
                                    "mensageiro real")
            };

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            OpenBusContext context = ORBInitializer.Context;

            _conn = context.ConnectByAddress(host, port);
            context.SetDefaultConnection(_conn);

            bool failed = true;

            try {
                // Faz o login
                _conn.LoginByCertificate(entity, privateKey);
                // Registra a oferta no barramento
                _offer = context.OfferRegistry.registerService(ic, properties);
                failed = false;
            }
            // Login
            catch (AccessDenied) {
                Console.WriteLine(Resources.ServerAccessDenied);
            }
            catch (MissingCertificate) {
                Console.WriteLine(Resources.MissingCertificateForEntity + entity);
            }
            // Registro
            catch (UnauthorizedFacets) {
                Console.WriteLine(Resources.UnauthorizedFacets);
            }
            // Barramento
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }
            finally {
                if (failed)
                {
                    Exit(1);
                }
            }

            // Mantém a thread ativa para aguardar requisições
            Console.WriteLine(Resources.ServerOK);
            Thread.Sleep(Timeout.Infinite);
        }
        internal void Activate()
        {
            bool register = false;

            lock (_lock) {
                if (!_active)
                {
                    register = _active = true;
                }
            }
            if (register)
            {
                bool succeeded = false;
                while (!succeeded)
                {
                    try {
                        // Registra a oferta no barramento
                        IndependentClockServer.Offer =
                            ORBInitializer.Context.OfferRegistry.registerService(_ic, _props);
                        lock (_lock) {
                            // libera o registerer para novo uso
                            _active = false;
                        }
                        succeeded = true;
                    }
                    // Registro
                    catch (UnauthorizedFacets) {
                        Console.WriteLine(Resources.UnauthorizedFacets);
                    }
                    // Barramento
                    catch (ServiceFailure e) {
                        Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                        Console.WriteLine(e);
                    }
                    catch (TRANSIENT) {
                        Console.WriteLine(Resources.BusTransientErrorMsg);
                    }
                    catch (COMM_FAILURE) {
                        Console.WriteLine(Resources.BusCommFailureErrorMsg);
                    }
                    catch (Exception e) {
                        NO_PERMISSION npe = null;
                        if (e is TargetInvocationException)
                        {
                            // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                            npe = e.InnerException as NO_PERMISSION;
                        }
                        if ((npe == null) && (!(e is NO_PERMISSION)))
                        {
                            // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                            throw;
                        }
                        npe = npe ?? (NO_PERMISSION)e;
                        if (npe.Minor == NoLoginCode.ConstVal)
                        {
                            Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                        }
                        else
                        {
                            throw;
                        }
                    }
                    finally {
                        if (!succeeded)
                        {
                            Thread.Sleep(_waitTime);
                        }
                    }
                }
            }
        }
        private static void InvalidLogin(Connection conn, LoginInfo login)
        {
            bool succeeded = false;

            while (!succeeded)
            {
                try {
                    // Faz o login
                    conn.LoginByCertificate(_entity, _privateKey);
                    succeeded = true;
                }
                // Login
                catch (AlreadyLoggedInException) {
                    // Ignora o erro e retorna, pois já está reautenticado e portanto já há uma thread tentando registrar
                    return;
                }
                catch (AccessDenied) {
                    Console.WriteLine(Resources.ServerAccessDenied);
                }
                catch (MissingCertificate) {
                    Console.WriteLine(Resources.MissingCertificateForEntity + _entity);
                }
                // Barramento
                catch (ServiceFailure e) {
                    Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                    Console.WriteLine(e);
                }
                catch (TRANSIENT) {
                    Console.WriteLine(Resources.BusTransientErrorMsg);
                }
                catch (COMM_FAILURE) {
                    Console.WriteLine(Resources.BusCommFailureErrorMsg);
                }
                catch (Exception e) {
                    NO_PERMISSION npe = null;
                    if (e is TargetInvocationException)
                    {
                        // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                        npe = e.InnerException as NO_PERMISSION;
                    }
                    if ((npe == null) && (!(e is NO_PERMISSION)))
                    {
                        // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                        throw;
                    }
                    npe = npe ?? (NO_PERMISSION)e;
                    if (npe.Minor == NoLoginCode.ConstVal)
                    {
                        Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                    }
                    else
                    {
                        throw;
                    }
                }
                if (succeeded)
                {
                    // Inicia o processo de re-registro da oferta
                    _registerer.Activate();
                }
                else
                {
                    Thread.Sleep(_interval);
                }
            }
        }
        private static void Main(String[] args)
        {
            // Obtém dados através dos argumentos
            string host   = args[0];
            ushort port   = Convert.ToUInt16(args[1]);
            string domain = args[2];
            string entity = args[3];

            byte[] password = new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : entity);

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            ORBInitializer.InitORB();
            OpenBusContext context = ORBInitializer.Context;
            Connection     conn    = context.ConnectByAddress(host, port);

            context.SetDefaultConnection(conn);

            // Pergunta ao usuário qual língua deseja utilizar
            Console.WriteLine(Resources.GreetingsWhichLanguage);
            string language = Console.ReadLine();

            if (language == null)
            {
                Console.WriteLine(Resources.GreetingsLanguageReadErrorMsg);
                Environment.Exit(1);
            }

            string greetingsIDLType = Repository.GetRepositoryID(typeof(Greetings));

            ServiceOfferDesc[] offers = null;
            try {
                // Faz o login
                conn.LoginByPassword(entity, password, domain);
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                // propriedade gerada automaticamente
                ServiceProperty autoProp1 =
                    new ServiceProperty("openbus.component.interface", greetingsIDLType);
                // propriedade definida pelo serviço greetings
                ServiceProperty prop = new ServiceProperty("offer.domain",
                                                           "Demo Greetings");
                ServiceProperty[] properties;
                if (!language.Equals(""))
                {
                    ServiceProperty autoProp2 = new ServiceProperty(
                        "openbus.component.name", language.ToLower());
                    properties = new[] { prop, autoProp1, autoProp2 };
                }
                else
                {
                    Console.WriteLine(Resources.GreetingsNoLanguageSpecified);
                    properties = new[] { prop, autoProp1 };
                }

                offers = context.OfferRegistry.findServices(properties);
            }
            catch (AccessDenied) {
                Console.WriteLine(Resources.ClientAccessDenied + entity + ".");
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }

            // analiza as ofertas encontradas
            if (offers != null)
            {
                if (offers.Length < 1)
                {
                    Console.WriteLine(Resources.ServiceNotFound);
                }
                else
                {
                    if (offers.Length > 1)
                    {
                        Console.WriteLine(Resources.ServiceFoundMoreThanExpected);
                    }
                    foreach (ServiceOfferDesc serviceOfferDesc in offers)
                    {
                        Console.WriteLine(Resources.ServiceFoundTesting);
                        try {
                            int hours = DateTime.Now.TimeOfDay.Hours;
                            MarshalByRefObject greetObj = hours < 12
                                              ? serviceOfferDesc.service_ref.
                                                          getFacetByName("GoodMorning")
                                              : serviceOfferDesc.service_ref.
                                                          getFacetByName(hours >= 18
                                                                   ? "GoodNight"
                                                                   : "GoodAfternoon");
                            if (greetObj == null)
                            {
                                Console.WriteLine(Resources.FacetNotFoundInOffer);
                                continue;
                            }
                            Greetings greetings = greetObj as Greetings;
                            if (greetings == null)
                            {
                                Console.WriteLine(Resources.FacetFoundWrongType);
                                continue;
                            }
                            Console.WriteLine(Resources.OfferFound);
                            // utiliza o serviço
                            Console.WriteLine((string)greetings.sayGreetings());
                        }
                        catch (TRANSIENT) {
                            Console.WriteLine(Resources.ServiceTransientErrorMsg);
                        }
                        catch (COMM_FAILURE) {
                            Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                                throw;
                            }
                            npe = npe ?? (NO_PERMISSION)e;
                            bool   found   = false;
                            string message = String.Empty;
                            switch (npe.Minor)
                            {
                            case NoLoginCode.ConstVal:
                                message = Resources.NoLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case UnknownBusCode.ConstVal:
                                message = Resources.UnknownBusCodeErrorMsg;
                                found   = true;
                                break;

                            case UnverifiedLoginCode.ConstVal:
                                message = Resources.UnverifiedLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case InvalidRemoteCode.ConstVal:
                                message = Resources.InvalidRemoteCodeErrorMsg;
                                found   = true;
                                break;
                            }
                            if (found)
                            {
                                Console.WriteLine(message);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                }
            }

            try {
                conn.Logout();
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            Console.WriteLine(Resources.ClientOK);
            Console.ReadKey();
        }
        private void Find()
        {
            try {
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                ServiceOfferDesc[] offers = null;
                while (true)
                {
                    try {
                        offers =
                            ORBInitializer.Context.OfferRegistry.findServices(_properties);
                    }
                    catch (ServiceFailure e) {
                        Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                        Console.WriteLine(e);
                    }
                    catch (TRANSIENT) {
                        Console.WriteLine(Resources.BusTransientErrorMsg);
                    }
                    catch (COMM_FAILURE) {
                        Console.WriteLine(Resources.BusCommFailureErrorMsg);
                    }
                    catch (Exception e) {
                        NO_PERMISSION npe = null;
                        if (e is TargetInvocationException)
                        {
                            // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                            npe = e.InnerException as NO_PERMISSION;
                        }
                        if ((npe == null) && (!(e is NO_PERMISSION)))
                        {
                            // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                            throw;
                        }
                        npe = npe ?? (NO_PERMISSION)e;
                        if (npe.Minor == NoLoginCode.ConstVal)
                        {
                            Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                        }
                        else
                        {
                            throw;
                        }
                    }
                    // analiza as ofertas encontradas
                    bool foundClock = false;
                    if (offers != null)
                    {
                        if (offers.Length < 1)
                        {
                            Console.WriteLine(Resources.ServiceNotFound);
                        }
                        else
                        {
                            if (offers.Length > 1)
                            {
                                Console.WriteLine(Resources.ServiceFoundMoreThanExpected);
                            }
                            foreach (ServiceOfferDesc serviceOfferDesc in offers)
                            {
                                Console.WriteLine(Resources.ServiceFoundTesting);
                                try {
                                    MarshalByRefObject clockObj =
                                        serviceOfferDesc.service_ref.getFacet(
                                            Repository.GetRepositoryID(typeof(Clock)));
                                    if (clockObj == null)
                                    {
                                        Console.WriteLine(Resources.FacetNotFoundInOffer);
                                        continue;
                                    }
                                    Clock clock = clockObj as Clock;
                                    if (clock == null)
                                    {
                                        Console.WriteLine(Resources.FacetFoundWrongType);
                                        continue;
                                    }
                                    Console.WriteLine(Resources.OfferFound);
                                    // achou o serviço
                                    lock (_lock) {
                                        _clock     = clock;
                                        _active    = false;
                                        foundClock = true;
                                    }
                                    break;
                                }
                                catch (TRANSIENT) {
                                    Console.WriteLine(Resources.ServiceTransientErrorMsg);
                                }
                                catch (COMM_FAILURE) {
                                    Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                                }
                                catch (Exception e) {
                                    NO_PERMISSION npe = null;
                                    if (e is TargetInvocationException)
                                    {
                                        // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                                        npe = e.InnerException as NO_PERMISSION;
                                    }
                                    if ((npe == null) && (!(e is NO_PERMISSION)))
                                    {
                                        // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                                        throw;
                                    }
                                    npe = npe ?? (NO_PERMISSION)e;
                                    bool   found   = false;
                                    string message = String.Empty;
                                    switch (npe.Minor)
                                    {
                                    case NoLoginCode.ConstVal:
                                        message = Resources.NoLoginCodeErrorMsg;
                                        found   = true;
                                        break;

                                    case UnknownBusCode.ConstVal:
                                        message = Resources.UnknownBusCodeErrorMsg;
                                        found   = true;
                                        break;

                                    case UnverifiedLoginCode.ConstVal:
                                        message = Resources.UnverifiedLoginCodeErrorMsg;
                                        found   = true;
                                        break;

                                    case InvalidRemoteCode.ConstVal:
                                        message = Resources.InvalidRemoteCodeErrorMsg;
                                        found   = true;
                                        break;
                                    }
                                    if (found)
                                    {
                                        Console.WriteLine(message);
                                    }
                                    else
                                    {
                                        throw;
                                    }
                                }
                            }
                            if (foundClock)
                            {
                                break;
                            }
                            Console.WriteLine(Resources.OfferFunctionalNotFound);
                        }
                    }
                    Thread.Sleep(_interval);
                }
            }
            catch (ThreadInterruptedException) {
                // não faz nada, thread principal abortou essa thread
            }
        }
        private static void Main()
        {
            string hostName         = DemoConfig.Default.busHostName;
            ushort hostPort         = DemoConfig.Default.busHostPort;
            bool   useSSL           = DemoConfig.Default.useSSL;
            string clientUser       = DemoConfig.Default.clientUser;
            string clientThumbprint = DemoConfig.Default.clientThumbprint;
            string serverUser       = DemoConfig.Default.serverUser;
            string serverThumbprint = DemoConfig.Default.serverThumbprint;
            ushort serverSSLPort    = DemoConfig.Default.serverSSLPort;
            ushort serverOpenPort   = DemoConfig.Default.serverOpenPort;
            string busIORFile       = DemoConfig.Default.busIORFile;

            if (useSSL)
            {
                Utils.InitSSLORB(clientUser, clientThumbprint, serverUser, serverThumbprint, serverSSLPort, serverOpenPort, true, true, "required", false, false);
            }
            else
            {
                ORBInitializer.InitORB();
            }

            //FileInfo logFileInfo = new FileInfo(DemoConfig.Default.openbusLogFile);
            //XmlConfigurator.ConfigureAndWatch(logFileInfo);

/*
 *    ConsoleAppender appender = new ConsoleAppender {
 *      Threshold = Level.Fatal,
 *      Layout =
 *        new SimpleLayout(),
 *    };
 *    BasicConfigurator.Configure(appender);
 */
            // credential reset tests
            CredentialResetTest[] resetCases = new CredentialResetTest[1];
            CredentialReset       tempReset  = new CredentialReset {
                session = 2 ^ 32 - 1, challenge = CreateSecret(EncryptedBlockSize.ConstVal)
            };

            resetCases[0] = new CredentialResetTest {
                Reset = tempReset, Expected = InvalidRemoteCode.ConstVal
            };

            // no permission tests
            NoPermissionTest[] noPermissionCases = new NoPermissionTest[12];
            noPermissionCases[0] = new NoPermissionTest {
                Raised = 0, Expected = 0
            };
            noPermissionCases[1] = new NoPermissionTest {
                Raised = InvalidCredentialCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };
            noPermissionCases[2] = new NoPermissionTest {
                Raised = InvalidChainCode.ConstVal, Expected = InvalidChainCode.ConstVal
            };
            noPermissionCases[3] = new NoPermissionTest {
                Raised = UnverifiedLoginCode.ConstVal, Expected = UnverifiedLoginCode.ConstVal
            };
            noPermissionCases[4] = new NoPermissionTest {
                Raised = UnknownBusCode.ConstVal, Expected = UnknownBusCode.ConstVal
            };
            noPermissionCases[5] = new NoPermissionTest {
                Raised = InvalidPublicKeyCode.ConstVal, Expected = InvalidPublicKeyCode.ConstVal
            };
            noPermissionCases[6] = new NoPermissionTest {
                Raised = NoCredentialCode.ConstVal, Expected = NoCredentialCode.ConstVal
            };
            noPermissionCases[7] = new NoPermissionTest {
                Raised = NoLoginCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };
            noPermissionCases[8] = new NoPermissionTest {
                Raised = InvalidRemoteCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };
            noPermissionCases[9] = new NoPermissionTest {
                Raised = UnavailableBusCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };
            noPermissionCases[10] = new NoPermissionTest {
                Raised = InvalidTargetCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };
            noPermissionCases[11] = new NoPermissionTest {
                Raised = InvalidLoginCode.ConstVal, Expected = InvalidRemoteCode.ConstVal
            };

            ORBInitializer.InitORB();
            OpenBusContext       context = ORBInitializer.Context;
            ConnectionProperties props   = new ConnectionPropertiesImpl();
            Connection           conn;

            if (useSSL)
            {
                string ior = File.ReadAllText(busIORFile);
                conn = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), ior), props);
            }
            else
            {
                conn = context.ConnectByAddress(hostName, hostPort, props);
            }
            context.SetDefaultConnection(conn);

            const string userLogin = "******";

            byte[] userPassword = new ASCIIEncoding().GetBytes(userLogin);

            conn.LoginByPassword(userLogin, userPassword, "testing");

            // propriedades geradas automaticamente
            ServiceProperty prop1 = new ServiceProperty("openbus.component.interface", Repository.GetRepositoryID(typeof(Server)));
            // propriedade definida pelo servidor protocol
            ServiceProperty prop2 = new ServiceProperty("offer.domain",
                                                        "Interoperability Tests");

            ServiceProperty[]       properties = { prop1, prop2 };
            List <ServiceOfferDesc> offers     =
                Utils.FindOffer(ORBInitializer.Context.OfferRegistry, properties, 1, 10, 1);

            bool foundOne = false;

            foreach (ServiceOfferDesc serviceOfferDesc in offers)
            {
                try {
                    string found = Utils.GetProperty(serviceOfferDesc.properties, "openbus.offer.entity");
                    Logger.Info("Entidade encontrada: " + found);
                    MarshalByRefObject serverProxyObj =
                        serviceOfferDesc.service_ref.getFacet(
                            Repository.GetRepositoryID(typeof(Server)));
                    if (serverProxyObj == null)
                    {
                        Logger.Info(
                            "Não foi possível encontrar uma faceta com esse nome.");
                        continue;
                    }
                    Server serverProxy = serverProxyObj as Server;
                    if (serverProxy == null)
                    {
                        Logger.Info("Faceta encontrada não implementa Server.");
                        continue;
                    }
                    foundOne = true;
                    // inicio dos testes
                    serverProxy.NonBusCall();
                    foreach (CredentialResetTest test in resetCases)
                    {
                        bool error = false;
                        try {
                            serverProxy.ResetCredentialWithChallenge(test.Reset.session,
                                                                     test.Reset.challenge);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                throw;
                            }
                            npe   = npe ?? (NO_PERMISSION)e;
                            error = true;
                            Assert.AreEqual(test.Expected, npe.Minor);
                            Assert.AreEqual(CompletionStatus.Completed_No, npe.Status);
                        }
                        Assert.IsTrue(error);
                    }

                    foreach (NoPermissionTest test in noPermissionCases)
                    {
                        bool error = false;
                        try {
                            serverProxy.RaiseNoPermission(test.Raised);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                throw;
                            }
                            npe   = npe ?? (NO_PERMISSION)e;
                            error = true;
                            Assert.AreEqual(test.Expected, npe.Minor);
                            Assert.AreEqual(CompletionStatus.Completed_No, npe.Status);
                        }
                        Assert.IsTrue(error);
                    }
                }
                catch (TRANSIENT) {
                    Logger.Info(
                        "Uma das ofertas obtidas é de um cliente inativo. Tentando a próxima.");
                }
            }
            conn.Logout();
            Assert.IsTrue(foundOne);
            Logger.Info("Fim.");
        }
Beispiel #11
0
        private CollaborationRegistry GetCollabs()
        {
            bool find = _collabs == null;

            if (!find)
            {
                try
                {
                    find = !_context.ORB.non_existent(_collabs);
                }
                catch (Exception)
                {
                    find = true;
                }
            }
            if (find)
            {
                ServiceProperty[] serviceProperties = new ServiceProperty[1];
                string            collabsRegType    = Repository.GetRepositoryID(typeof(CollaborationRegistry));
                serviceProperties[0] =
                    new ServiceProperty("openbus.component.interface", collabsRegType);
                ServiceOfferDesc[] services = _context.OfferRegistry.findServices(serviceProperties);

                foreach (ServiceOfferDesc offerDesc in services)
                {
                    try
                    {
                        MarshalByRefObject obj =
                            offerDesc.service_ref.getFacet(collabsRegType);
                        if (obj == null)
                        {
                            continue;
                        }
                        _collabs = obj as CollaborationRegistry;
                        if (_collabs != null)
                        {
                            break; // found one
                        }
                    }
                    catch (Exception e)
                    {
                        NO_PERMISSION npe = null;
                        if (e is TargetInvocationException)
                        {
                            npe = e.InnerException as NO_PERMISSION;
                        }
                        // caso não seja uma NO_PERMISSION{NoLogin} descarta essa oferta.
                        if ((npe == null) && (!(e is NO_PERMISSION)))
                        {
                            continue;
                        }
                        npe = npe ?? e as NO_PERMISSION;
                        switch (npe.Minor)
                        {
                        case NoLoginCode.ConstVal:
                            throw;
                        }
                    }
                }
            }
            return(_collabs);
        }
        private static void Main(String[] args)
        {
            // Obtém dados através dos argumentos
            _host     = args[0];
            _port     = Convert.ToUInt16(args[1]);
            _domain   = args[2];
            _entity   = args[3];
            _password =
                new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : _entity);

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            ORBInitializer.InitORB();
            OpenBusContext context = ORBInitializer.Context;

            context.SetDefaultConnection(NewLogin());

            ServiceOfferDesc[] offers = null;
            try {
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                // propriedade gerada automaticamente
                ServiceProperty autoProp =
                    new ServiceProperty("openbus.component.interface", TimerIDLType);
                // propriedade definida pelo serviço timer
                ServiceProperty prop = new ServiceProperty("offer.domain",
                                                           "Demo Multiplexing");
                ServiceProperty[] properties = { prop, autoProp };
                offers = context.OfferRegistry.findServices(properties);
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }
            if (offers != null)
            {
                for (int i = 0; i < offers.Length; i++)
                {
                    // garante espera de no mínimo 5s para que dê tempo do cliente executar
                    // todas as chamadas e aumentar o número de notificações esperadas
                    StartTheThread(i + 5, offers[i], Thread.CurrentThread);
                }
            }

            // Mantém a thread ativa para aguardar requisições
            try {
                Thread.Sleep(Timeout.Infinite);
            }
            catch (ThreadInterruptedException) {
                // Se a thread for acordada, é porque não há mais requisições pendentes
                Console.WriteLine(Resources.ClientOK);
            }

            // Faz logout da conexão usada nessa thread
            try {
                context.GetDefaultConnection().Logout();
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            Console.ReadKey();
        }
        private static void UseOffer(double timeout, ServiceOfferDesc desc,
                                     Thread wThread)
        {
            Connection conn = NewLogin();

            if (!conn.Login.HasValue)
            {
                return;
            }
            OpenBusContext context = ORBInitializer.Context;

            context.SetCurrentConnection(conn);
            bool failed = true;

            try {
                MarshalByRefObject timerObj = desc.service_ref.getFacet(TimerIDLType);
                if (timerObj == null)
                {
                    Console.WriteLine(Resources.FacetNotFoundInOffer);
                    return;
                }
                Timer timer = timerObj as Timer;
                if (timer == null)
                {
                    Console.WriteLine(Resources.FacetFoundWrongType);
                    return;
                }
                Console.WriteLine(Resources.OfferFound);
                // utiliza o serviço
                timer.newTrigger(timeout,
                                 new CallbackImpl(conn.Login.Value.id, desc, wThread));
                failed = false;
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.ServiceTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                bool   found   = false;
                string message = String.Empty;
                switch (npe.Minor)
                {
                case NoLoginCode.ConstVal:
                    message = Resources.NoLoginCodeErrorMsg;
                    found   = true;
                    break;

                case UnknownBusCode.ConstVal:
                    message = Resources.UnknownBusCodeErrorMsg;
                    found   = true;
                    break;

                case UnverifiedLoginCode.ConstVal:
                    message = Resources.UnverifiedLoginCodeErrorMsg;
                    found   = true;
                    break;

                case InvalidRemoteCode.ConstVal:
                    message = Resources.InvalidRemoteCodeErrorMsg;
                    found   = true;
                    break;
                }
                if (found)
                {
                    Console.WriteLine(message);
                }
                else
                {
                    throw;
                }
            }
            finally {
                try {
                    context.SetCurrentConnection(null);
                    conn.Logout();
                }
                catch (ServiceFailure e) {
                    Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                    Console.WriteLine(e);
                }
                catch (TRANSIENT) {
                    Console.WriteLine(Resources.BusTransientErrorMsg);
                }
                catch (COMM_FAILURE) {
                    Console.WriteLine(Resources.BusCommFailureErrorMsg);
                }
                if (!failed)
                {
                    Pending++;
                }
            }
        }
Beispiel #14
0
        public void showMessage(string message)
        {
            CallerChain chain = ORBInitializer.Context.CallerChain;

            Console.WriteLine(Resources.CallChainProxyForwardingMessage +
                              ChainToString.ToString(chain));
            OpenBusContext context = ORBInitializer.Context;

            context.JoinChain(chain);
            foreach (ServiceOfferDesc offer in Proxy.Offers)
            {
                try {
                    MarshalByRefObject messengerObj =
                        offer.service_ref.getFacet(_messengerType);
                    if (messengerObj == null)
                    {
                        Console.WriteLine(Resources.FacetNotFoundInOffer);
                        continue;
                    }
                    Messenger messenger = messengerObj as Messenger;
                    if (messenger == null)
                    {
                        Console.WriteLine(Resources.FacetFoundWrongType);
                        continue;
                    }
                    Console.WriteLine(Resources.OfferFound);
                    // utiliza o serviço
                    messenger.showMessage(message);
                    return;
                }
                catch (Unauthorized) {
                }
                catch (Unavailable) {
                }
                catch (TRANSIENT) {
                    Console.WriteLine(Resources.ServiceTransientErrorMsg);
                }
                catch (COMM_FAILURE) {
                    Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                }
                catch (Exception e) {
                    NO_PERMISSION npe = null;
                    if (e is TargetInvocationException)
                    {
                        // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                        npe = e.InnerException as NO_PERMISSION;
                    }
                    if ((npe == null) && (!(e is NO_PERMISSION)))
                    {
                        // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                        throw;
                    }
                    npe = npe ?? e as NO_PERMISSION;
                    bool   found = false;
                    string msg   = String.Empty;
                    switch (npe.Minor)
                    {
                    case NoLoginCode.ConstVal:
                        msg   = Resources.NoLoginCodeErrorMsg;
                        found = true;
                        break;

                    case UnknownBusCode.ConstVal:
                        msg   = Resources.UnknownBusCodeErrorMsg;
                        found = true;
                        break;

                    case UnverifiedLoginCode.ConstVal:
                        msg   = Resources.UnverifiedLoginCodeErrorMsg;
                        found = true;
                        break;

                    case InvalidRemoteCode.ConstVal:
                        msg   = Resources.InvalidRemoteCodeErrorMsg;
                        found = true;
                        break;
                    }
                    if (found)
                    {
                        Console.WriteLine(msg);
                    }
                    else
                    {
                        throw;
                    }
                }
            }
            Console.WriteLine(Resources.CallChainProxyUnavailableMessage);
            throw new Unavailable();
        }
        private static void PrintTime()
        {
            while (true)
            {
                bool  failed = true;
                Clock clock  = _finder.Clock;
                if (clock != null)
                {
                    try {
                        // utiliza o serviço
                        long ticks = clock.getTimeInTicks();
                        Console.WriteLine("Hora do servidor: {0:HH:mm:ss}",
                                          new DateTime(ticks));
                        failed = false;
                    }
                    catch (TRANSIENT) {
                        Console.WriteLine(Resources.ServiceTransientErrorMsg);
                    }
                    catch (COMM_FAILURE) {
                        Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                    }
                    catch (Exception e) {
                        NO_PERMISSION npe = null;
                        if (e is TargetInvocationException)
                        {
                            // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                            npe = e.InnerException as NO_PERMISSION;
                        }
                        if ((npe == null) && (!(e is NO_PERMISSION)))
                        {
                            // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                            throw;
                        }
                        npe = npe ?? (NO_PERMISSION)e;
                        bool   found   = false;
                        string message = String.Empty;
                        switch (npe.Minor)
                        {
                        case NoLoginCode.ConstVal:
                            message = Resources.NoLoginCodeErrorMsg;
                            found   = true;
                            break;

                        case UnknownBusCode.ConstVal:
                            message = Resources.UnknownBusCodeErrorMsg;
                            found   = true;
                            break;

                        case UnverifiedLoginCode.ConstVal:
                            message = Resources.UnverifiedLoginCodeErrorMsg;
                            found   = true;
                            break;

                        case InvalidRemoteCode.ConstVal:
                            message = Resources.InvalidRemoteCodeErrorMsg;
                            found   = true;
                            break;
                        }
                        if (found)
                        {
                            Console.WriteLine(message);
                        }
                        else
                        {
                            throw;
                        }
                    }
                    if (failed)
                    {
                        // descarta o clock atual e busca um novo
                        _finder.Clock = null;
                    }
                }
                if (failed)
                {
                    _finder.Activate();
                    Console.WriteLine("Hora local: {0:HH:mm:ss}", DateTime.Now);
                }
                Thread.Sleep(_interval);
            }
        }
Beispiel #16
0
        private static void Main(String[] args)
        {
            // Registra handler para o caso do processo ser finalizado
            AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit;

            // Obtém dados através dos argumentos
            string host   = args[0];
            ushort port   = Convert.ToUInt16(args[1]);
            string entity = args[2];
            AsymmetricCipherKeyPair privateKey = Crypto.ReadKeyFile(args[3]);

            // Associa uma callback de escolha de conexão de despacho
            ORBInitializer.InitORB();
            OpenBusContext context = ORBInitializer.Context;

            context.OnCallDispatch = Dispatch;

            // Cria 3 conexões com o mesmo barramento, uma para cada componente.
            for (int i = 0; i < 3; i++)
            {
                ComponentContext component =
                    new DefaultComponentContext(new ComponentId("Timer", 1, 0, 0, ".net"));

                // Cria a faceta Timer para o componente
                TimerImpl timer = new TimerImpl();
                component.AddFacet("Timer", Repository.GetRepositoryID(typeof(Timer)),
                                   timer);

                // Define propriedades para a oferta de serviço a ser registrada no barramento
                IComponent        ic         = component.GetIComponent();
                ServiceProperty[] properties =
                {
                    new ServiceProperty(
                        "offer.domain",
                        "Demo Multiplexing")
                };

                // Cria a conexão e a define como conexão corrente
                Connection conn = context.ConnectByAddress(host, port);
                context.SetCurrentConnection(conn);

                // Associa a conexão à URI do servant para que a callback possa escolher
                lock (Connections){
                    Connections.Add(RemotingServices.GetObjectUri(timer), conn);
                }

                bool failed = true;
                try {
                    // Faz o login
                    conn.LoginByCertificate(entity, privateKey);
                    // Registra a oferta no barramento
                    Offers.Add(conn, context.OfferRegistry.registerService(ic, properties));
                    failed = false;
                }
                // Login
                catch (AccessDenied) {
                    Console.WriteLine(Resources.ServerAccessDenied);
                }
                catch (MissingCertificate) {
                    Console.WriteLine(Resources.MissingCertificateForEntity + entity);
                }
                // Registro
                catch (UnauthorizedFacets) {
                    Console.WriteLine(Resources.UnauthorizedFacets);
                }
                // Barramento
                catch (ServiceFailure e) {
                    Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                    Console.WriteLine(e);
                }
                catch (TRANSIENT) {
                    Console.WriteLine(Resources.BusTransientErrorMsg);
                }
                catch (COMM_FAILURE) {
                    Console.WriteLine(Resources.BusCommFailureErrorMsg);
                }
                catch (Exception e) {
                    NO_PERMISSION npe = null;
                    if (e is TargetInvocationException)
                    {
                        // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                        npe = e.InnerException as NO_PERMISSION;
                    }
                    if ((npe == null) && (!(e is NO_PERMISSION)))
                    {
                        // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                        throw;
                    }
                    npe = npe ?? (NO_PERMISSION)e;
                    if (npe.Minor == NoLoginCode.ConstVal)
                    {
                        Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                    }
                    else
                    {
                        throw;
                    }
                }
                finally {
                    if (failed)
                    {
                        Exit(1);
                    }
                }
            }

            // Mantém a thread ativa para aguardar requisições
            Console.WriteLine(Resources.ServerOK);
            Thread.Sleep(Timeout.Infinite);
        }
Beispiel #17
0
        private static void Main(String[] args)
        {
            // Obtém dados através dos argumentos
            string host   = args[0];
            ushort port   = Convert.ToUInt16(args[1]);
            string domain = args[2];
            string entity = args[3];

            byte[] password = new ASCIIEncoding().GetBytes(args.Length > 4 ? args[4] : entity);

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            ORBInitializer.InitORB();
            OpenBusContext context = ORBInitializer.Context;
            Connection     conn    = context.ConnectByAddress(host, port);

            context.SetDefaultConnection(conn);

            string helloIDLType = Repository.GetRepositoryID(typeof(Hello));

            ServiceOfferDesc[] offers = null;
            try {
                // Faz o login
                conn.LoginByPassword(entity, password, domain);
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                // propriedade gerada automaticamente
                ServiceProperty autoProp =
                    new ServiceProperty("openbus.component.interface", helloIDLType);
                // propriedade definida pelo serviço hello
                ServiceProperty   prop       = new ServiceProperty("offer.domain", "Demo Hello");
                ServiceProperty[] properties = { prop, autoProp };
                offers = context.OfferRegistry.findServices(properties);
            }
            catch (AccessDenied) {
                Console.WriteLine(Resources.ClientAccessDenied + entity + ".");
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }

            // analiza as ofertas encontradas
            bool failed = true;

            if (offers != null)
            {
                if (offers.Length < 1)
                {
                    Console.WriteLine(Resources.ServiceNotFound);
                }
                else
                {
                    if (offers.Length > 1)
                    {
                        Console.WriteLine(Resources.ServiceFoundMoreThanExpected);
                    }
                    foreach (ServiceOfferDesc serviceOfferDesc in offers)
                    {
                        Console.WriteLine(Resources.ServiceFoundTesting);
                        try {
                            MarshalByRefObject helloObj =
                                serviceOfferDesc.service_ref.getFacet(helloIDLType);
                            if (helloObj == null)
                            {
                                Console.WriteLine(Resources.FacetNotFoundInOffer);
                                continue;
                            }
                            Hello hello = helloObj as Hello;
                            if (hello == null)
                            {
                                Console.WriteLine(Resources.FacetFoundWrongType);
                                continue;
                            }
                            Console.WriteLine(Resources.OfferFound);
                            // utiliza o serviço
                            hello.sayHello();
                            failed = false;
                            break;
                        }
                        catch (TRANSIENT) {
                            Console.WriteLine(Resources.ServiceTransientErrorMsg);
                        }
                        catch (COMM_FAILURE) {
                            Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                                throw;
                            }
                            npe = npe ?? (NO_PERMISSION)e;
                            bool   found   = false;
                            string message = String.Empty;
                            switch (npe.Minor)
                            {
                            case NoLoginCode.ConstVal:
                                message = Resources.NoLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case UnknownBusCode.ConstVal:
                                message = Resources.UnknownBusCodeErrorMsg;
                                found   = true;
                                break;

                            case UnverifiedLoginCode.ConstVal:
                                message = Resources.UnverifiedLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case InvalidRemoteCode.ConstVal:
                                message = Resources.InvalidRemoteCodeErrorMsg;
                                found   = true;
                                break;
                            }
                            if (found)
                            {
                                Console.WriteLine(message);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                    if (failed)
                    {
                        Console.WriteLine(Resources.OfferFunctionalNotFound);
                    }
                }
            }

            try {
                conn.Logout();
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            if (!failed)
            {
                Console.WriteLine(Resources.ClientOK);
            }
            Console.ReadKey();
        }
        private static void NotifyTrigger(Connection current, CallerChain chain,
                                          double timeout, Callback cb)
        {
            Thread.Sleep(Convert.ToInt32(timeout * 1000));
            OpenBusContext context = ORBInitializer.Context;

            context.SetCurrentConnection(current);
            context.JoinChain(chain);
            try {
                // utiliza o serviço
                cb.notifyTrigger();
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.ServiceTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? e as NO_PERMISSION;
                bool   found   = false;
                string message = String.Empty;
                switch (npe.Minor)
                {
                case NoLoginCode.ConstVal:
                    message = Resources.NoLoginCodeErrorMsg;
                    found   = true;
                    break;

                case UnknownBusCode.ConstVal:
                    message = Resources.UnknownBusCodeErrorMsg;
                    found   = true;
                    break;

                case UnverifiedLoginCode.ConstVal:
                    message = Resources.UnverifiedLoginCodeErrorMsg;
                    found   = true;
                    break;

                case InvalidRemoteCode.ConstVal:
                    message = Resources.InvalidRemoteCodeErrorMsg;
                    found   = true;
                    break;
                }
                if (found)
                {
                    Console.WriteLine(message);
                }
                else
                {
                    throw;
                }
            }
        }