예제 #1
0
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);
}
예제 #2
0
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();

};