zx_status_t ServerManager::CloseFifoServer() { switch (GetState()) { case ThreadState::Running: server_->ShutDown(); JoinServer(); break; case ThreadState::Joinable: zxlogf(ERROR, "block: Joining un-closed FIFO server\n"); JoinServer(); break; case ThreadState::None: break; } return ZX_OK; }
bool ServerManager::IsFifoServerRunning() { switch (GetState()) { case ThreadState::Running: return true; case ThreadState::Joinable: // Joining the thread here is somewhat arbitrary -- as opposed to joining in // |StartServer()| -- but it lets us avoid a second atomic load. JoinServer(); break; case ThreadState::None: break; } return false; }
/////////////////// // Join a server void Menu_Net_NETJoinServer(const std::string& sAddress, const std::string& sName) { // Fill in the game structure CCombobox* combo = (CCombobox *) cInternet.getWidget(mi_PlayerSelection); const GuiListItem::Pt item = combo->getSelectedItem(); if(!item.get()) { errors << "no player selected" << endl; return; } tLXOptions->sLastSelectedPlayer = item->index(); if(!JoinServer(sAddress, sName, item->index())) return; // Shutdown cInternet.Shutdown(); iNetMode = net_join; tMenu->iReturnTo = net_internet; // Connect to the server Menu_Net_JoinConnectionInitialize(sAddress); }