⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 junknc.cc

📁 支持组件模型CCM的开源中间件-mico
💻 CC
字号:
#include "JunkNC.h"#include <stdlib.h>#include <iostream>#include <sstream>using std::cerr;using std::cout;using std::endl;JunkNC::JunkNC(JunkFactory_ptr jf,        CosNaming::NamingContext_ptr root_nc,       int                          client_num) :           junk_factory_(JunkFactory::_duplicate(jf) ),           root_nc_(CosNaming::NamingContext::_duplicate(root_nc) ),           client_num_(client_num){    nc_add_  = 0;    nc_remove_ = 0;}boolJunkNC::traverse(CosNaming::Name&             cname,          CosNaming::NamingContext_ptr nc,          int                          level,         int                          liter,         bool&                        empty){    empty = false;    int len = cname.length();    CosNaming::BindingIterator_var it;    CosNaming::BindingList_var     bl;    //cerr << "JunkNC::traverse:list -" << client_num_ << "-" << liter     //                                      << "-" << level << "-";    //for ( int k = 0; k < cname.length(); k++) cerr << cname[k].id.in() << " ";    //cerr << endl;    try {        nc->list(100, bl, it);    } catch ( const CORBA::OBJECT_NOT_EXIST& cne) {        cerr << "JunkNC::traverse-list -" << client_num_ << "-" << liter <<                       "-" << level << "- OBJECT_NOT_EXIST-continuing" << endl;        cerr << "                      -" << client_num_ << "-  ";        for ( CORBA::ULong k = 0; k < cname.length(); k++)                                              cerr << cname[k].id.in() << " ";        cerr << endl;        return true;    } catch ( const CORBA::SystemException& se) {        cerr << "JunkNC::traverse-list-Unknown system exception" << endl;        cerr << se << endl;        return false;    }    if ( bl->length() == 0 ) empty = true;    for ( CORBA::ULong i = 0; i < bl->length(); i++) {        cname.length(len + 1);        cname[len].id   = CORBA::string_dup((*bl)[i].binding_name[0].id);        cname[len].kind = CORBA::string_dup((*bl)[i].binding_name[0].kind);        CORBA::Object_var obj;        try {            obj = root_nc_->resolve(cname);        } catch ( const CosNaming::NamingContext::NotFound& nf) {            cerr << "JunkNC::traverse      -" << client_num_ << "-" << liter <<                                                       "- NotFound" << endl;            cerr << "                      -" << client_num_ << "-  ";            for ( CORBA::ULong k = 0; k < cname.length(); k++)                                            cerr << cname[k].id.in() << " ";            cerr << endl;            continue;        } catch ( const CosNaming::NamingContext::CannotProceed& cp) {            cerr << "JunkNC::traverse      -" << client_num_ <<                                                 "-  CannotProceed" << endl;            return false;        } catch ( const CosNaming::NamingContext::InvalidName& cp) {            cerr << "JunkNC::traverse      -" << client_num_ <<                                                 "-  InvalidName" << endl;            return false;        } catch ( const CORBA::OBJECT_NOT_EXIST& one) {            cerr << "JunkNC::traverse      -" << client_num_ <<                                   "-  OBJECT_NOT_EXIST-continuing" << endl;            return true;        } catch ( const CORBA::TRANSIENT& te) {            cerr << "JunkNC::traverse      -" << client_num_ <<                                                 "-  TRANSIENT" << endl;            return false;        } catch ( const CORBA::SystemException& te) {            cerr << "JunkNC::traverse      -" << client_num_ <<                                          "-  Unknown system exception" << endl;            cerr << te << endl;            return false;        }        if ( bl[i].binding_type ==CosNaming::ncontext) {            CosNaming::NamingContext_var nc_t =                                       CosNaming::NamingContext::_narrow(obj);            bool empty;            if ( !traverse(cname, nc_t.in(), level + 1, liter, empty ) )                                                                 return false;            if ( empty ) {                int jsw = (int)( 5.0 * rand() /(RAND_MAX + 1.0) );                if ( jsw <= 3 ) {                    if ( !remove_nc( nc_t, cname, liter) ) return false;                } else if ( jsw <= 4  && level < 9) {                    if ( !add_nc(nc, level, liter) ) return false;                    empty = false;                }            }        }        cname.length(len);    // restore cname    }    int jsw = (int) (3.0 * ::rand() / (RAND_MAX + 1.0) ) ;    if ( jsw == 0 && bl->length() < 3 && level < 9) {        if ( !add_nc(nc, level, liter) ) return false;        empty = false;    }    return true;}boolJunkNC::remove_nc(CosNaming::NamingContext_ptr nc_t,          CosNaming::Name&             name,          int                          liter){    //cerr << "JunkNC::remove_nc     -" << client_num_ << "-" << liter << "-"    //                                       << " " << "-";    //for ( int k = 0; k < name.length(); k++) cerr << name[k].id.in() << " ";    //cerr << endl;    try {        nc_t->destroy();        nc_remove_++;    } catch ( const CosNaming::NamingContext::NotEmpty& ne ) {        cerr << "JunkNC::remove_nc     -" << client_num_ <<                             "-NotEmpty-Maybe someone put something in it"                                                      << endl;        cerr << "                      -" << client_num_ << "-  ";        for ( CORBA::ULong k = 0; k < name.length(); k++)                                               cerr << name[k].id.in() << " ";        cerr << endl;        return true;    } catch ( const CORBA::OBJECT_NOT_EXIST& one ) {        cerr << "JunkNC::remove_nc     -" << client_num_ <<                                "-OBJECT_NOT_EXIST, someone removed it" << endl;        cerr << "                      -" << client_num_ << "-  ";        for ( CORBA::ULong k = 0; k < name.length(); k++)                                      cerr << name[k].id.in() << " ";        cerr << endl;        return true;    } catch ( const CORBA::SystemException& te) {        cerr << "JunkNC::remove_nc      -" << client_num_ <<                                         "-Unknown system exception-2" << endl;        cerr << te << endl;        return false;    }    try {        root_nc_->unbind(name);    } catch ( const CosNaming::NamingContext::NotFound& nf) {        cerr << "JunkNC::remove_nc      -" << client_num_ <<                             "-NotFound-Maybe someone got it" << endl;        return true;    } catch ( const CosNaming::NamingContext::CannotProceed& cp) {        cerr << "JunkNC::remove_nc      -" << client_num_ <<                             "-CannotProceed" << endl;        return false;    } catch ( const CosNaming::NamingContext::InvalidName& cp) {        cerr << "JunkNC::remove_nc      -" << client_num_ <<                             "-InvalidName" << endl;        return false;    }    return true;}boolJunkNC::add_nc(CosNaming::NamingContext_ptr nc, int level, int liter){    int m;    try {        m = junk_factory_->junk_count()->nc_count();    } catch ( const CORBA::SystemException& te) {        cerr << "JunkNC::add_nc         -" << client_num_ <<                                        "-Unknown system exception-0" << endl;        cerr << te << endl;        return false;    }    std::ostringstream buf;    buf << "nc_" << level << "_" << m;    //cerr << "JunkNC::add_nc        -" << client_num_ << "-" << liter     //                     << "-" << level << "-" << buf.str() << endl;    CosNaming::Name name;    name.length(1);    name[0].id    = CORBA::string_dup(buf.str().c_str() );    name[0].kind  = CORBA::string_dup("");    try {        nc->bind_new_context(name);        nc_add_++;    } catch ( const CosNaming::NamingContext::AlreadyBound& ab) {        cerr << "JunkNC::add_nc         -" << client_num_ <<                                "-AlreadyBound-shouldn't happen" << endl;        return false;    } catch ( const CORBA::OBJECT_NOT_EXIST& one ) {        cerr << "JunkNC::add_nc        -" << client_num_ << "-" << liter <<                              "- OBJECT_NOT_EXIST, someone removed it" << endl;    } catch ( const CORBA::SystemException& te) {        cerr << "JunkNC::add_nc         -" << client_num_ <<                                         "-Unknown system exception-2" << endl;        cerr << te << endl;        return false;    }    return true;}voidJunkNC::report(int client_num){    cerr << "JunkNc::report-" << client_num <<            "**********************************"            ", nc_add = " << nc_add_ << ", nc_remove = " << nc_remove_ << endl;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -