001package jmri.jmrit.z21server; 002 003import org.slf4j.Logger; 004import org.slf4j.LoggerFactory; 005 006 007import static java.lang.Thread.State.NEW; 008import static java.lang.Thread.State.TERMINATED; 009 010/** 011 * Creates a thread for the Z21 server. 012 * 013 * @author Jean-Yves Roda (C) 2023 014 * @author Eckart Meyer (C) 2025 (enhancements, WlanMaus support) 015 */ 016 017public class FacelessServer { 018 019 private static FacelessServer instance; 020 private static MainServer server; 021 private static Thread currentThread; 022 023 private final static Logger log = LoggerFactory.getLogger(FacelessServer.class); 024 025 private FacelessServer() { 026 initServer(); 027 createThread(); 028 } 029 030 private static void initServer() { 031 server = new MainServer(); 032 } 033 034 private static synchronized void createThread() { 035 currentThread = new Thread(server); 036 currentThread.setName("Z21 App Server"); 037 } 038 039 synchronized public static FacelessServer getInstance() { 040 if (instance == null) { 041 instance = new FacelessServer(); 042 } 043 return instance; 044 } 045 046 public synchronized void start() { 047 if (currentThread.getState() == TERMINATED) { 048 createThread(); 049 } 050 if (currentThread.getState() == NEW) { 051 log.info("Trying to start new z21 server..."); 052 currentThread.start(); 053 } 054 } 055 056 public synchronized void stop() { 057 currentThread.interrupt(); 058 } 059 060 061}