All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.iprogrammerr.bright.server.RequestResponseConnection Maven / Gradle / Ivy

package com.iprogrammerr.bright.server;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

import com.iprogrammerr.bright.server.application.Application;
import com.iprogrammerr.bright.server.protocol.HttpOneProtocol;
import com.iprogrammerr.bright.server.protocol.RequestResponseProtocol;
import com.iprogrammerr.bright.server.request.Request;
import com.iprogrammerr.bright.server.response.Response;
import com.iprogrammerr.bright.server.response.template.NotFoundResponse;

public final class RequestResponseConnection implements Connection {

	private final RequestResponseProtocol protocol;
	private final List applications;

	public RequestResponseConnection(RequestResponseProtocol protocol, List applications) {
		this.protocol = protocol;
		this.applications = applications;
	}

	public RequestResponseConnection(RequestResponseProtocol protocol, Application application) {
		this(protocol, Collections.singletonList(application));
	}

	public RequestResponseConnection(List applications) {
		this(new HttpOneProtocol(), applications);
	}

	public RequestResponseConnection(Application application) {
		this(new HttpOneProtocol(), Collections.singletonList(application));
	}

	@Override
	public void connect(Socket socket) {
		try (InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream()) {
			Request request = this.protocol.request(is);
			Response response = response(request);
			this.protocol.write(os, response);
			if (this.protocol.shouldClose(request)) {
				socket.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			close(socket);
		}
	};

	private void close(Socket socket) {
		try {
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private Response response(Request request) {
		for (Application a : this.applications) {
			Optional r = a.response(request);
			if (r.isPresent()) {
				return r.get();
			}
		}
		return new NotFoundResponse();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy