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}