package com.comandante.stickypunch; import com.notnoop.apns.APNS; import com.notnoop.apns.ApnsService; import com.comandante.pushpackage.PackageZipBuilder; import com.comandante.pushpackage.PackageZipConfiguration; import com.comandante.pushpackage.PackageZipPool; import com.comandante.pushpackage.PackageZipPoolPopulate; import com.comandante.pushpackage.PackageZipSigner; import com.comandante.stickypunch.apnspush.ApnsConfiguration; import com.comandante.stickypunch.apnspush.ApnsFeedbackService; import com.comandante.stickypunch.apnspush.ApnsPushManager; import com.comandante.stickypunch.http.HttpConfiguration; import com.comandante.stickypunch.http.HttpServiceFactory; import com.comandante.stickypunch.http.WebPushUserIdAuth; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.SystemConfiguration; import org.eclipse.jetty.server.Server; import java.io.File; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) throws Exception { Configuration config = buildConfiguration(args); // // Database // WebPushStoreConfiguration pushStoreConfiguration = new WebPushStoreConfiguration(config); SQLiteWebPushStore sqLiteWebPushStore = SQLiteWebPushStoreFactory.create(pushStoreConfiguration); // // PackageZip // PackageZipConfiguration packageZipConfiguration = new PackageZipConfiguration(config); PackageZipSigner packageSigner = new PackageZipSigner(packageZipConfiguration); PackageZipBuilder packageZipBuilder = new PackageZipBuilder(packageZipConfiguration, packageSigner); PackageZipPool packageZipPool = new PackageZipPool(packageZipConfiguration); PackageZipPoolPopulate packageZipPoolPopulate = new PackageZipPoolPopulate(packageZipPool, packageZipBuilder); // // Apns Push Service // ApnsConfiguration apnsConfiguration = new ApnsConfiguration(config); ApnsService apnsService = APNS.newService().withCert(apnsConfiguration.apnsCertLocation, apnsConfiguration.apnsCertPassword).withProductionDestination().build(); ApnsPushManager apnsPushManager = new ApnsPushManager(apnsService, apnsConfiguration, sqLiteWebPushStore); ApnsFeedbackService apnsFeedbackService = new ApnsFeedbackService(apnsService, apnsConfiguration, sqLiteWebPushStore); // // Jetty // HttpConfiguration httpConfiguration = new HttpConfiguration(config); WebPushUserIdAuth webPushUserIdAuth = new WebPushUserIdAuth(sqLiteWebPushStore, httpConfiguration); Server jettyServer = HttpServiceFactory.create(sqLiteWebPushStore, webPushUserIdAuth, packageZipPool, apnsPushManager, httpConfiguration); // START apnsService.start(); apnsFeedbackService.startAndWait(); Executors.newSingleThreadExecutor().submit(packageZipPoolPopulate); jettyServer.start(); } private static Configuration buildConfiguration(String[] args) throws ConfigurationException { CompositeConfiguration compositeConfiguration = new CompositeConfiguration(); File propFile = new File(args[0]); if (propFile.exists()) { compositeConfiguration.addConfiguration(new PropertiesConfiguration(propFile)); } compositeConfiguration.addConfiguration(new SystemConfiguration()); return compositeConfiguration; } }