package org.netmelody.cieye.server; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import org.netmelody.cieye.core.observation.CommunicationNetwork; import org.netmelody.cieye.server.configuration.ServerConfiguration; import org.netmelody.cieye.server.observation.GovernmentReport; import org.netmelody.cieye.server.observation.GovernmentWatchdog; import org.netmelody.cieye.server.observation.IntelligenceAgency; import org.netmelody.cieye.server.observation.protocol.JsonRestRequesterBuilder; import org.netmelody.cieye.server.response.CachedRequestOriginTracker; import org.netmelody.cieye.server.response.CiEyeResourceEngine; import org.simpleframework.http.core.Container; import org.simpleframework.http.resource.ResourceContainer; import org.simpleframework.transport.connect.Connection; import org.simpleframework.transport.connect.SocketConnection; public final class CiEyeServer { private final ServerConfiguration agency = new ServerConfiguration(); private final CommunicationNetwork network = new JsonRestRequesterBuilder(); private final IntelligenceAgency intelligenceAgency = IntelligenceAgency.create(network, agency.detective(), agency.foreignAgents()); private final Container container = new ResourceContainer(new CiEyeResourceEngine(agency.observationTargetDirectory(), agency.album(), agency.information(), new CachedRequestOriginTracker(agency.detective()), intelligenceAgency, new GovernmentReport(new GovernmentWatchdog(network)))); private final Connection connection; private final InetSocketAddress address; public CiEyeServer(int port) throws IOException { connection = new SocketConnection(container); address = new InetSocketAddress(port); } public void start() throws IOException { final SocketAddress socketAddress = connection.connect(address); if (socketAddress instanceof InetSocketAddress) { System.out.format("Starting CI-Eye server on http://localhost:%d", ((InetSocketAddress)socketAddress).getPort()); return; } System.out.format("Starting CI-Eye server on: %s", socketAddress.toString()); } }