public static List <ServiceOfferDesc> FindOffer(OfferRegistry offers, ServiceProperty[] search, int count, int tries, int interval) { OrbServices orb = OrbServices.GetSingleton(); List <ServiceOfferDesc> found = new List <ServiceOfferDesc>(); for (int i = 0; i < tries; i++) { found.Clear(); Thread.Sleep(interval * 1000); ServiceOfferDesc[] services = offers.findServices(search); if (services.Length > 0) { foreach (ServiceOfferDesc offerDesc in services) { try { if (!orb.non_existent(offerDesc.service_ref)) { found.Add(offerDesc); } } catch (Exception) { // não adiciona essa oferta } } } if (found.Count >= count) { return(found); } } StringBuilder buffer = new StringBuilder(); foreach (ServiceOfferDesc desc in found) { String name = GetProperty(desc.properties, "openbus.offer.entity"); String login = GetProperty(desc.properties, "openbus.offer.login"); buffer.AppendFormat("\n - {0} ({1})", name, login); } String msg = String .Format( "Não foi possível encontrar ofertas: found ({0}) expected({1}) tries ({2}) time ({3}){4}", found.Count, count, tries, tries * interval, buffer); throw new InvalidOperationException(msg); }
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 responde em inglês ORBInitializer.InitORB(); ComponentContext english = new DefaultComponentContext(new ComponentId("english", 1, 0, 0, ".net")); english.AddFacet("GoodMorning", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.English, GreetingsImpl.Period.Morning)); english.AddFacet("GoodAfternoon", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.English, GreetingsImpl.Period.Afternoon)); english.AddFacet("GoodNight", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.English, GreetingsImpl.Period.Night)); // Cria o componente que responde em espanhol ComponentContext spanish = new DefaultComponentContext(new ComponentId("spanish", 1, 0, 0, ".net")); spanish.AddFacet("GoodMorning", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Spanish, GreetingsImpl.Period.Morning)); spanish.AddFacet("GoodAfternoon", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Spanish, GreetingsImpl.Period.Afternoon)); spanish.AddFacet("GoodNight", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Spanish, GreetingsImpl.Period.Night)); // Cria o componente que responde em português ComponentContext portuguese = new DefaultComponentContext(new ComponentId("portuguese", 1, 0, 0, ".net")); portuguese.AddFacet("GoodMorning", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Portuguese, GreetingsImpl.Period.Morning)); portuguese.AddFacet("GoodAfternoon", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Portuguese, GreetingsImpl.Period.Afternoon)); portuguese.AddFacet("GoodNight", Repository.GetRepositoryID(typeof(Greetings)), new GreetingsImpl(GreetingsImpl.Language.Portuguese, GreetingsImpl.Period.Night)); // Define propriedade para as ofertas de serviço a serem registradas no barramento ServiceProperty[] properties = { new ServiceProperty("offer.domain", "Demo Greetings") }; // 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 as ofertas no barramento OfferRegistry registry = context.OfferRegistry; Offers.Add(registry.registerService(english.GetIComponent(), properties)); Offers.Add(registry.registerService(spanish.GetIComponent(), properties)); Offers.Add(registry.registerService(portuguese.GetIComponent(), 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); }
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("messengerproxy", 1, 0, 0, ".net")); // Cria a faceta Messenger para o componente string messengerIDLType = Repository.GetRepositoryID(typeof(Messenger)); component.AddFacet("Messenger", messengerIDLType, new ProxyMessengerImpl()); // Define propriedades para a oferta de serviço a ser registrada no barramento IComponent ic = component.GetIComponent(); ServiceProperty prop1 = new ServiceProperty("offer.domain", "Demo CallChain"); ServiceProperty prop2 = new ServiceProperty("offer.role", "mensageiro proxy"); ServiceProperty[] properties = { prop1, prop2 }; // 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); // Busca o Messenger real OfferRegistry offerRegistry = context.OfferRegistry; ServiceProperty autoProp = new ServiceProperty("openbus.component.interface", messengerIDLType); ServiceProperty findProp = new ServiceProperty("offer.role", "mensageiro real"); ServiceProperty[] findProps = { autoProp, findProp, prop1 }; Offers = offerRegistry.findServices(findProps); // Registra a própria oferta no barramento _offer = 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.CallChainProxyOK); Thread.Sleep(Timeout.Infinite); }