package uk.co.pembo.e2stream.server; import com.sun.net.httpserver.*; import java.io.*; import java.net.*; import java.util.List; import java.util.Map; import uk.co.pembo.browser.Browser; import uk.co.pembo.e2stream.server.handlers.AboutResponse; import uk.co.pembo.e2stream.server.handlers.AddDirectoryResponse; import uk.co.pembo.e2stream.server.handlers.LogResponse; import uk.co.pembo.e2stream.server.handlers.StringBasedResponse; import uk.co.pembo.e2stream.server.handlers.E2Response; import uk.co.pembo.e2stream.server.handlers.ImgResponse; import uk.co.pembo.e2stream.server.handlers.InfoResponse; import uk.co.pembo.e2stream.server.handlers.OtherWidgetDownload; import uk.co.pembo.e2stream.server.handlers.QuitResponse; import uk.co.pembo.e2stream.server.handlers.WidgetDownload; import uk.co.pembo.e2stream.server.handlers.WidgetList; import uk.co.pembo.e2stream.widget.WidgetContainer; import uk.co.pembo.utils.JarFileExtractor; import uk.co.pembo.utils.Logger; public class Startup { public Startup() { } public static void setConstants() throws Exception { InetAddress IP = ServerIP.getLocalHostLANAddress(); Settings.setIpAddress(IP.getHostAddress()); } public static void main(String args[]) throws Exception { if(args != null && args.length > 0 && args[0] != null) Settings.setAdditionalAppsDir(args[0]); setConstants(); printStartupText(); if(Settings.getAdditionalAppsDir() != null) { Logger.logInfo((new StringBuilder("Additional Apps Directory Provided: [")).append(Settings.getAdditionalAppsDir()).append("]").toString()); AlternateDirectory.loadFilesInDirectory(Settings.getAdditionalAppsDir()); } Logger.logInfo("Waiting for connection from TV"); Startup self = new Startup(); WidgetContainer.setFile(JarFileExtractor.getWidget()); byte c[] = WidgetContainer.getFile(); WidgetContainer.setFile(c); HttpServer server = null; try { server = HttpServer.create(new InetSocketAddress(80), 0); //TV Urls server.createContext("/widgetlist.xml", new WidgetList()); server.createContext((new StringBuilder("/Widget/")).append(Settings.getFilename()).toString(), new WidgetDownload()); //Main Installer URLs server.createContext("/index.html", new InfoResponse()); //server.createContext("/", new InfoResponse()); server.createContext("/index.htm", new InfoResponse()); server.createContext("/index.php", new InfoResponse()); //Installer Config URLs server.createContext("/adddirectory.html", new AddDirectoryResponse()); server.createContext("/exit.html", new QuitResponse()); server.createContext("/about.html", new AboutResponse()); //E2 Simulator URLs server.createContext("/web/getallservices", new E2Response("C:/temp/e2logs/getallServices.xml")); server.createContext("/web/getlocations", new E2Response("C:/temp/e2logs/getlocations.xml")); server.createContext("/web/movielist", new E2Response("C:/temp/e2logs/movielist.xml")); server.createContext("/about.html", new AboutResponse()); server.createContext("/style.css", new StringBasedResponse("style.css")); server.createContext("/jquerymin.css", new StringBasedResponse("jquerymin.css")); server.createContext("/dropdown.css", new StringBasedResponse("dropdown.css")); server.createContext("/logo.png", new ImgResponse("logo.png")); server.createContext("/jquery.js", new ImgResponse("jquery.js")); server.createContext("/jquery-ui.js", new ImgResponse("jquery-ui.js")); server.createContext("/dropdown.js", new ImgResponse("dropdown.js")); server.createContext("/logs.html", new LogResponse()); if(Settings.getAdditionalAppsDir() != null) { List filenames = AlternateDirectory.getFilenames(); for(int i = 0; i < filenames.size(); i++) { HttpContext ctx = server.createContext((new StringBuilder("/Widget/")).append((String)filenames.get(i)).toString(), new OtherWidgetDownload()); ctx.getAttributes().put("idx", Integer.valueOf(i)); } } server.setExecutor(null); server.start(); Browser.openBrowser("http://localhost/index.html"); } catch(BindException e) { Settings.setLastError(e.toString()); fatalError("Unable to bind server to port 80, please close down any webservers or other server running on Port 80 and start this installer again"); System.in.read(); } catch(Exception e) { fatalError("An unkown error occurred. Please see the information below and report this at http://www.pembo.co.uk/bugs"); e.printStackTrace(); System.in.read(); } } private static void printStartupText() throws UnknownHostException { Logger.logInfo("______________________________________________________________"); Logger.logInfo(" "); Logger.logInfo("E2Stream Installer "); Logger.logInfo("______________________________________________________________"); Logger.logInfo(" "); Logger.logInfo("Installer version: " + Settings.getInstallerVersion()); Logger.logInfo("E2Stream version : " + Settings.getE2StreamVersion()); Logger.logInfo("(C)2014 Pembo.co.uk"); Logger.logInfo("http://www.pembo.co.uk/e2stream/"); Logger.logInfo("______________________________________________________________"); Logger.logInfo(" "); Logger.logInfo("Please configure your samsung SMART TV as documented here:"); Logger.logInfo("* http://www.pembo.co.uk/e2stream/"); Logger.logInfo("Using the following IP Address on your TV:"); Logger.logInfo((new StringBuilder("* ")).append(ServerIP.getLocalHostLANAddress().getHostAddress()).toString()); Logger.logInfo("______________________________________________________________"); } private static void fatalError(String message) { Logger.logError(message); } }