Package cn.aprilsoft.TinyAppServer.processor

Source Code of cn.aprilsoft.TinyAppServer.processor.MainProcessor

package cn.aprilsoft.TinyAppServer.processor;

import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import cn.aprilsoft.TinyAppServer.configuare.sceurity.UrlSecurityUtil;
import cn.aprilsoft.TinyAppServer.exception.ClientAbortException;
import cn.aprilsoft.TinyAppServer.exception.HttpException;
import cn.aprilsoft.TinyAppServer.exception.ServerException;
import cn.aprilsoft.TinyAppServer.reqNrep.Request;
import cn.aprilsoft.TinyAppServer.reqNrep.RequestUtil;
import cn.aprilsoft.TinyAppServer.reqNrep.Response;
import cn.aprilsoft.TinyAppServer.reqNrep.ResponseUtil;
import cn.aprilsoft.conf4j.Conf4j;

public class MainProcessor {

    private static final Logger       log        = Logger.getLogger(MainProcessor.class);

    private final List<ProcessorInfo> processors = new ArrayList<ProcessorInfo>();

    public MainProcessor() {
        List<String> procs = Conf4j.getSemicolonSplitedTrimProperties(MainProcessor.class, "processors");
        for (int i = 0; i < procs.size(); i++) {
            String proc = procs.get(i);
            String[] proca = proc.split(",");
            String filter = proca[0].trim();
            String procn = proca[1].trim();
            try {
                Processor processor = (Processor) Class.forName(procn).newInstance();
                processor.init();
                processors.add(new ProcessorInfo(filter, processor));
            } catch (Exception e) {
                throw new ServerException(e);
            }
        }
    }

    public void process(Socket in) {
        try {
            boolean processed = false;
            Request request = RequestUtil.createRequest(in);
            Response response = ResponseUtil.createResponse(in);

            String url = request.getUrl();

            // url security check
            UrlSecurityUtil.checkUrlUpFolder(url);

            if (url != null) {
                for (int i = 0; i < processors.size(); i++) {
                    ProcessorInfo processorInfo = processors.get(i);
                    if (isFilterMatch(url, processorInfo)) {
                        processorInfo.getProcessor().process(request, response);
                        processed = true;
                        break;
                    }
                }
            }
            if (!processed) {
                log.warn("Not processed url:'" + request.getUrl() + "'.");
            }
        } catch (ClientAbortException e) {
            log.info("Client abort connection.");
        } catch (SocketException e) {
            log.info("Client abort connection.");
        } catch (IOException e) {
            throw new HttpException(e);
        }
    }

    private static boolean isFilterMatch(String url, ProcessorInfo processorInfo) {
        return processorInfo.getPattern().matcher(url).matches();
    }
}
TOP

Related Classes of cn.aprilsoft.TinyAppServer.processor.MainProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.