inline bean_ptr<C> Database::manageBean(C* ptr) { sqlid_t id=allocId( Database::getClassName<C>() ); bean_key key(con,id); dbUpdate(key,*ptr); return Registry<C>::createBeanPtr(key,ptr); }
void zDSPMain::run() { set<zDSPThread*> servers; { // FIXME (ybasov) for (unsigned j = 0; j < 1; ++j) { int s= ZNSOCKET::server("127.0.0.1", 8055, 1024); if(s < 0) { cout << "Can't open socket " << endl; continue; } int c=3; for(int i=0; i < c; i++) { zDSPThread* p= new zDSPThread(s); servers.insert(p); p->start(); } } //if(!conndb.connect(ssp->db_host, ssp->db_user, ssp->db_password, ssp->db_name, ssp->db_port)) if(!conndb.connect("localhost", "root", "", "TESTABC", 3306)) { zLog::Log.write("Can't open connection to database: "+string(mysql_error(conndb.conndb))+";\n"); // cout << "Can't open connection to database: "+string(mysql_error(conndb.conndb)) << endl; } else { zLog::Log.write("MYSQL started;\n"); /*cout << "MYSQL started" << endl;*/ } } cout << "Main thread start." << endl; for(ssize_t sleep_flag=0;;sleep_flag=0) { dbUpdate(); set<zDSPThread*> r; for(set<zDSPThread*>::const_iterator k=servers.begin(); k != servers.end(); ++k) { if(!ZNSOCKET::alive((*k)->sock)) { sleep_flag++; cout << "Server socket(" << (*k)->address << ":" << (*k)->serverport << ") is closed???" << endl; r.insert(*k); // int s= ZNSOCKET::server(DSP_HOST, DSP_PORT+i, 1024); // if(s < 0) n++; // else { servers[i]->update(s); n=0; } } } for(set<zDSPThread*>::iterator k=r.begin(); k != r.end(); ++k) { (*k)->stop(); (*k)->join(); ZNSOCKET::close((*k)->sock); servers.erase(*k); delete (*k); } // if(n > 99) { cout << "Can't open server socket(" << n << ") = " << DSP_HOST << ":" << DSP_PORT << endl; break; } if(servers.size() == 0) { cout << "All DSP servers are closed" << endl; break; } if(exit_flag) break; if(sleep_flag == 0) zThread::sleep(50); } cout << "Main thread exit." << endl; for(set<zDSPThread*>::iterator k=servers.begin(); k != servers.end(); ++k) { (*k)->stop(); (*k)->join(); ZNSOCKET::close((*k)->sock); delete (*k); } servers.clear(); };