| | |
| | | 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 java.lang.reflect.InvocationTargetException; |
| | | import java.lang.reflect.Method; |
| | | import java.net.InetSocketAddress; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URI; |
| | | import java.net.URISyntaxException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | |
| | | import java.util.logging.Level; |
| | | import java.util.logging.Logger; |
| | | import de.uhilger.neon.Scanner.ScannerListener; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * Einen Neon-Server aus einer Beschreibungsdatei herstellen |
| | |
| | | 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) |
| | |
| | | IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException { |
| | | |
| | | Logger.getLogger(Factory.class.getName()).log(Level.FINER, System.getProperty("java.class.path")); |
| | | |
| | | |
| | | List<ServerDescriptor> serverList = d.server; |
| | | for (ServerDescriptor sd : serverList) { |
| | | HttpServer server = HttpServer.create(new InetSocketAddress(sd.port), 0); |
| | |
| | | server.setExecutor(Executors.newFixedThreadPool(10)); |
| | | server.start(); |
| | | } |
| | | fireInstanceStarted(); |
| | | |
| | | fireInstanceStarted(); |
| | | } |
| | | |
| | | private Authenticator createAuthenticator(NeonDescriptor d) { |
| | |
| | | l.serverCreated(server); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void fireHandlerCreated(HttpContext ctx, HttpHandler h) { |
| | | for (FactoryListener l : listeners) { |
| | | l.handlerCreated(ctx, h); |