| | |
| | | package de.uhilger.neon; |
| | | |
| | | import de.uhilger.neon.entity.ActorDescriptor; |
| | | import com.google.gson.Gson; |
| | | import com.sun.net.httpserver.Authenticator; |
| | | import com.sun.net.httpserver.Filter; |
| | | import com.sun.net.httpserver.HttpContext; |
| | |
| | | import de.uhilger.neon.entity.NeonDescriptor; |
| | | import de.uhilger.neon.entity.ServerDescriptor; |
| | | import java.io.BufferedReader; |
| | | import java.io.File; |
| | | import java.io.FileReader; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.io.InputStreamReader; |
| | |
| | | import de.uhilger.neon.Scanner.ScannerListener; |
| | | |
| | | /** |
| | | * Einen Neon-Server aus einer Beschreibungsdatei herstellen |
| | | * Einen Neon-Server aus einer Beschreibungsdatei herstellen und starten |
| | | * |
| | | * Die Werte aus der Beschreibungsdatei werden in die Attribute der HttpContext-Objekte geschrieben, |
| | | * die zu jedem Server eroeffnet werden. |
| | | * |
| | | * Die Entitaeten stehen wie folgt in Beziehung: HttpServer -1:n-> HttpContext -1:1-> HttpHandler |
| | | * Die Entitaeten stehen wie folgt in Beziehung: HttpServer -1:n-> HttpContext -1:n-> HttpHandler. |
| | | * |
| | | * Die Factory legt die Kontexte, Handler sowie die Verbindung zu den Actors selbsttaetig an. Alle |
| | | * Parameter aus 'attributes'-Elementen der Beschreibungsdatei werden als Attribute in den |
| | |
| | | * |
| | | * @author Ulrich Hilger |
| | | * @version 1, 6.2.2024 |
| | | * @version 2, 24.2.2026 |
| | | */ |
| | | public class Factory implements ScannerListener { |
| | | |
| | |
| | | public Factory() { |
| | | listeners = new ArrayList<>(); |
| | | actorMap = new HashMap<>(); |
| | | } |
| | | |
| | | /** |
| | | * Beschreibungsdatei lesen |
| | | * |
| | | * @param file die Datei, die den Server beschreibt |
| | | * @return ein Objekt, das den Server beschreibt |
| | | * @throws IOException wenn die Datei nicht gelesen werden konnte |
| | | */ |
| | | public NeonDescriptor readDescriptor(File file) throws IOException { |
| | | //Logger logger = Logger.getLogger(Factory.class.getName()); |
| | | //logger.log(Level.INFO, "reading NeonDescriptor from {0}", file.getAbsolutePath()); |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | BufferedReader r = new BufferedReader(new FileReader(file)); |
| | | String line = r.readLine(); |
| | | while (line != null) { |
| | | sb.append(line); |
| | | line = r.readLine(); |
| | | } |
| | | r.close(); |
| | | |
| | | Gson gson = new Gson(); |
| | | return gson.fromJson(sb.toString(), NeonDescriptor.class); |
| | | } |
| | | |
| | | public void runInstance(Class c, NeonDescriptor d) |
| | |
| | | server.start(); |
| | | } |
| | | |
| | | // List<WsServerDescriptor> wsserverList = d.wsserver; |
| | | // for (WsServerDescriptor wsd : wsserverList) { |
| | | // WebSocketServer wsserver = new SimpleWsServer(new InetSocketAddress(wsd.port)); |
| | | // fireWsServerCreated(wsserver); |
| | | // } |
| | | |
| | | fireInstanceStarted(); |
| | | |
| | | |
| | | } |
| | | |
| | | private Authenticator createAuthenticator(NeonDescriptor d) { |
| | |
| | | } |
| | | } |
| | | |
| | | //private void fireWsServerCreated(WebSocketServer wsserver) { |
| | | // for (WsFactoryListener l : listeners) { |
| | | // l.wsServerCreated(wsserver); |
| | | // } |
| | | //} |
| | | |
| | | |
| | | private void fireHandlerCreated(HttpContext ctx, HttpHandler h) { |
| | | for (FactoryListener l : listeners) { |
| | | l.handlerCreated(ctx, h); |