public bool Start(String serverID) { ViennaServer server = GetServer(serverID); if (server == null) { return(false); } if (server.GetServerThread().IsAlive) { return(true); } try { // replace int index = m_servers.IndexOf(server); server = ViennaServer.Create(server.GetModel()); if (server == null) { m_servers.RemoveAt(index); } else { m_servers[index] = server; } server.Start(); server.SetPriority(ThreadPriority.Normal); Thread.Sleep(0); //yeild other theads of lower priority to run } catch (Exception e) { log.Log(Level.SEVERE, "Server=" + serverID, e); return(false); } log.Info(server.ToString()); //ViennaServerGroup.Get().Dump(); if (server == null) { return(false); } return(server.GetServerThread().IsAlive); } // startIt
} // getActive public bool StopAll() { log.Info("Stop All log================================>" + DateTime.Now.Millisecond.ToString()); ViennaServer[] servers = GetActive(); // Interrupt for (int i = 0; i < servers.Length; i++) { ViennaServer server = servers[i]; try { if (server.GetServerThread().IsAlive) { server.SetPriority(ThreadPriority.Highest); server.Interrupt(); } } catch (Exception e) { log.Log(Level.SEVERE, "(Interrupting) - " + server, e); } } // for all servers Thread.Sleep(0); //yielding // Wait for death for (int i = 0; i < servers.Length; i++) { ViennaServer server = servers[i]; try { int maxWait = 10; // 10 iterations = 1 sec while (server.GetServerThread().IsAlive) { if (maxWait-- == 0) { log.Severe("Wait timeout for interruped " + server); break; } Thread.Sleep(100); // 1/10 } } catch (Exception e) { log.Log(Level.SEVERE, "(Waiting) - " + server, e); } } // for all servers // Final Check int noRunning = 0; int noStopped = 0; for (int i = 0; i < servers.Length; i++) { ViennaServer server = servers[i]; try { if (server.GetServerThread().IsAlive) { log.Warning("Alive: " + server); noRunning++; } else { log.Info("Stopped: " + server); noStopped++; } } catch (Exception e) { log.Log(Level.SEVERE, "(Checking) - " + server, e); noRunning++; } } // End Session MSession session = MSession.Get(Env.GetContext(), false); // finish if (session != null) { session.Logout(); } m_servers.Clear(); log.Fine("Running=" + noRunning + ", Stopped=" + noStopped); //ViennaServerGroup.Get().Dump(); return(noRunning == 0); } // stopAll