void CServer::Run() { Init(); CSocket sock; if(!sock.Socket()) return; if(!sock.Bind( CConfig::GetInstance()->GetPortPID(ID_SERVER), CConfig::GetInstance()->GetAddrPID(ID_SERVER)) ) return; cout << "listening.." << endl; sock.Listen(); CWireThread* pThreadWire = new CWireThread(); pThreadWire->Start(); CGateThread* pThreadGate = new CGateThread(); pThreadGate->Start(); if(!sock.Accept(m_sockMain)) return; if(!sock.Accept(m_sockOT)) return; sock.Close(); cout << "accepted sockets!" << endl; COTThread* pThreadOT = new COTThread(); pThreadOT->Start(); RunMainThread(); m_sockMain.Close(); pThreadOT->Wait(); m_sockOT.Close(); pThreadGate->Wait(); pThreadWire->Wait(); Cleanup(); delete pThreadOT; delete pThreadGate; delete pThreadWire; }