Example #1
0
static VALUE
ServiceModule_service_name(VALUE self, VALUE name)
{
  struct Service *ruby_service;
  struct Client *ruby_client;

  Check_Type(name, T_STRING);

  rb_iv_set(self, "@ServiceName", name);

  ruby_service = make_service(StringValueCStr(name));

  set_service(self, ruby_service);

  if(ircncmp(ruby_service->name, StringValueCStr(name), NICKLEN) != 0)
    rb_iv_set(self, "@ServiceName", rb_str_new2(ruby_service->name));

  clear_serv_tree_parse(&ruby_service->msg_tree);
  dlinkAdd(ruby_service, &ruby_service->node, &services_list);
  hash_add_service(ruby_service);
  ruby_client = introduce_client(ruby_service->name, ruby_service->name, TRUE);

  rb_iv_set(self, "@client", client_to_value(ruby_client));

  rb_iv_set(self, "@langpath", rb_str_new2(LANGPATH));

  return name;
}
Example #2
0
service_container::service_ptr_t
service_container::resolve_service_dependencies(string id)
{
    logtrace << "service_container::resolve_service_dependencies('" << id << "')";

    service_ptr_t service = this->services_.find(id);

    logtrace << " » found service: " << service->id()
             << ", got a " << service->get_service_definition_type_name();

    if (service->was_visited())
        return service;
    else if (service->is_resolving_in_progress())
        return nullptr; // todo: throw ex. ? is this a cycle ?

    logtrace << " » resolving dependencies...";

    service->set_resolving_in_progress(true);

    auto dependencies = service->get_dependencies_map();

    logtrace << " » dependencies map contains "
             << dependencies.size() << " elements.";

    for (auto pair : dependencies) {
        auto depdecl = pair.second;

        logtrace << "     - depends on service "
                 << depdecl->get_service_id()
                 << ", type: " << depdecl->get_service_type().pretty_name();

        service_ptr_t serv = this->resolve_service_dependencies(
                                 depdecl->get_service_id()
                             );

        logtrace << " » " << service->id()
                 << " : finished processing dep. : " << depdecl->get_service_id();

        depdecl->set_service(serv);
    }

    logtrace << " » " << service->id() << " : end of dependencies resolution.";
    logtrace << " » " << service->id() << " : about to construct service.";

    service->construct();

    logtrace << " » " << service->id() << " : construct() done.";

    service->set_resolving_in_progress(false);
    service->set_visited(true);

    return service;
}