view src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/StartBBSCodeSegment.java @ 9:2890ae6b1aef

network browsing
author tatsuki
date Fri, 03 Feb 2017 02:16:51 +0900
parents 766f7668521f
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.bbs.network.codesegment;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.FindNodeServlet;
import jp.ac.u_ryukyu.ie.cr.bbs.local.browsing.*;
import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.NetworkBulletinBoard;
import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.NetworkJungleBulletinBoard;
import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.RequestNumCheckServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.servlet.ServletHolder;

import javax.servlet.Servlet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StartBBSCodeSegment extends CodeSegment {

    int bbsPort = 8080;
    Receiver host = ids.create(CommandType.PEEK);
    private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
    private String[] args;
    boolean persistentFlag = false;

    public StartBBSCodeSegment(String[] _args, int p) {
        args = _args;
        bbsPort = p;
        host.setKey("host");	
    }

    public StartBBSCodeSegment() {
        args = null;
        host.setKey("host");	
    }

    @Override
    public void run() {
        String name = host.asString();
        Matcher matcher = pattern.matcher(name);
        matcher.find();
        //		String type = matcher.group(1);
        for(String arg: args)
            if (arg.equals("-persistent")) {
                persistentFlag = true;
            }
        NetworkBulletinBoard cassaBBS = null;
        if(persistentFlag) {
            System.out.println("log loading...");
            cassaBBS = NetworkJungleBulletinBoard.NewPersistentJungle(name);
            cassaBBS.init();
        } else {
            cassaBBS = new NetworkJungleBulletinBoard(name);
            cassaBBS.init();
        }

        System.out.println("StartBBSCodeSegment");
        System.out.println("name : "+ name);

        /* Jetty registration */
        String createBoardMessagePath = "/createBoardMessage";
        String createBoardPath = "/createBoard";
        String editMessagePath = "/editMessage";
        String showBoardMessagePath = "/showBoardMessage";
        String createChildPath = "/createChildMessage";
        String findNodeMessagePath = "/findNode";
        Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
        Servlet createBoard = new CreateBoardServlet(cassaBBS);
        Servlet createChild = new CreateChildServlet(cassaBBS);
        Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
        Servlet index = new ShowBoardsServlet(cassaBBS, createBoardPath, showBoardMessagePath, findNodeMessagePath);
        Servlet find = new FindNodeServlet(cassaBBS, showBoardMessagePath);
        Servlet board = new ShowBoardMessageServlet(cassaBBS, createBoardMessagePath, createChildPath, editMessagePath, showBoardMessagePath);
        Server serv = new Server(bbsPort );
        ServletHandler context = new ServletHandler();
        context.addServletWithMapping(new ServletHolder(find), findNodeMessagePath);
        context.addServletWithMapping(new ServletHolder(createBoardMessage), createBoardMessagePath);
        context.addServletWithMapping(new ServletHolder(createBoard), createBoardPath);
        context.addServletWithMapping(new ServletHolder(createChild), createChildPath);
        context.addServletWithMapping(new ServletHolder(editBoardMessage), editMessagePath);
        context.addServletWithMapping(new ServletHolder(index), "/");
        context.addServletWithMapping(new ServletHolder(board), showBoardMessagePath);
        serv.setHandler(context);



        //リクエストのカウントcheckに使う? 測定用
        String requestNumCheckPath = "/requestNum";
        Servlet requestNumCheckServlet = new RequestNumCheckServlet(cassaBBS);
        context.addServletWithMapping(new ServletHolder(requestNumCheckServlet), requestNumCheckPath);

        serv.setHandler(context);
        try {
            serv.start();
        } catch (Exception e) { }
        new LogUpdateCodeSegment();
    }

}