You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Пытался получить hostname из IOR, убил 2 часа, так и не нашёл... -1 В принципе, не сложно распарсить самому, но зачем парсить то, что и так парсится...
Почему такие сложности с корбой. Дело в том, что все объекты у неё спрятаны в базовый класс CORBA::Object. И чтобы получить доступ к конкретной функциональности, надо знать, какие интерфейсы может предоставлять конкретный объект. После чего ты делаешь resolve_initial_references() и получаешь уже более специализированный объект. Не зная того, как всё устроено и что во что можно превращать, ты никогда не догадаешься как что делать. Поэтому надо покупать толстую книжку от OCI и читать-читать-читать... Либо компилировать TAO с дебаг инфой и шагать-шагать-шагать. Но в том-то и дело, что в отладчике ковырять бесполезно, пока не знаешь какой объект во что можно превращать и какие интерфейсы в какой момент получать. Корба это пипец! Корба это заморочка! Корба это секта, в которой непосвященный ничего понять не сможет! До свиданья, Корба, 100 лет бы тебя не видел!
Попытка сделать это как написано здесь ни к чему не привела:
Вобщем, не сработал resolve_initial_references() от нашего орба. Получился пустой объект...
Хотя я вовсе не уверен, что Transport::IIOP::Current бы мне помог. Просто методом долгого блуждания по коду TAO наткнулся на то, что он умеет давать remote_host().
Пришлось морочить свою парсилку IOR-а:
if (!hostname_.empty())
return hostname_;
size_t ior_len = ior_.length();
if (ior_len < 7)
return hostname_;
size_t max = ior_len - 7;
size_t begin = ior_.find(':');
if (begin > max)
return hostname_;
++begin; ++max;
begin = ior_.find(':', begin);
if (begin > max)
return hostname_;
++begin; max += 2;
size_t end = ior_.find(':', begin);
if (end > max || end == begin)
return hostname_;
hostname_.assign(ior_.c_str() + begin, ior_.c_str() + end);
begin = hostname_.rfind('@');
if (begin != String::SubString::NPOS)
{
if (begin < hostname_.length() - 1)
{
hostname_.assign(hostname_.begin() + begin + 1, hostname_.end());
}
else
{
hostname_.clear();
}
}
return hostname_;
The text was updated successfully, but these errors were encountered:
Корба это пипец. Корба это заморочка.
Пытался получить hostname из IOR, убил 2 часа, так и не нашёл... -1 В принципе, не сложно распарсить самому, но зачем парсить то, что и так парсится...
Почему такие сложности с корбой. Дело в том, что все объекты у неё спрятаны в базовый класс CORBA::Object. И чтобы получить доступ к конкретной функциональности, надо знать, какие интерфейсы может предоставлять конкретный объект. После чего ты делаешь resolve_initial_references() и получаешь уже более специализированный объект. Не зная того, как всё устроено и что во что можно превращать, ты никогда не догадаешься как что делать. Поэтому надо покупать толстую книжку от OCI и читать-читать-читать... Либо компилировать TAO с дебаг инфой и шагать-шагать-шагать. Но в том-то и дело, что в отладчике ковырять бесполезно, пока не знаешь какой объект во что можно превращать и какие интерфейсы в какой момент получать. Корба это пипец! Корба это заморочка! Корба это секта, в которой непосвященный ничего понять не сможет! До свиданья, Корба, 100 лет бы тебя не видел!
Попытка сделать это как написано здесь ни к чему не привела:
Вобщем, не сработал resolve_initial_references() от нашего орба. Получился пустой объект...
Хотя я вовсе не уверен, что
Transport::IIOP::Current
бы мне помог. Просто методом долгого блуждания по коду TAO наткнулся на то, что он умеет давать remote_host().Пришлось морочить свою парсилку IOR-а:
The text was updated successfully, but these errors were encountered: