view src/fdl/test/debug2/FDLindaNode.java @ 92:ea4ee892baf5

commit
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Thu, 22 Apr 2010 16:13:03 +0900
parents
children 0ea086f0e96f
line wrap: on
line source

package fdl.test.debug2;

import java.io.IOException;

import fdl.FDLindaServ;
import fdl.MetaLinda;
import fdl.MetaEngine;

/**
* FDLindaNode
*
* @author Kazuki Akamine
*
* Federated Linda の Topology Node
* 接続する機能までを実装 MetaEngine は外部から提供される
*  
*/

public class FDLindaNode extends FDLindaServ {
	// Fields
	private MetaLinda ml;
	public static final int DEFAULTPORT = 10000;
	private static String manager;
	private final static String usageString
		= "Usage: FDLindaNode -manager SERVERNAME:PORT";

	// Constructor
	public FDLindaNode(int port) throws IOException {
		super(port);
		this.ml = new MetaLinda(tupleSpace, this);
	}
	
	@Override public void mainLoop() {
		me.mainLoop();
	}
	public void setMetaEngine(MetaEngine me) {
		this.me = me; 
	}
	public MetaLinda getMetaLinda() {
		return ml;
	}
	
	// main routine
	public static void main(String[] args) {
		int port = DEFAULTPORT;
		for (int i = 0; i < args.length; i++) {
			if ("-manager".equals(args[i])) {
				manager = args[++i];
			} else if ("-p".equals(args[i])) {
				port = new Integer(args[++i]).intValue();
			} else {
				System.err.println(usageString);
			}
		}
		
		String[] managerData = manager.split(":");
		String managerHostName = managerData[0];
		int managerPort;
		if (managerData.length > 1) {
			managerPort = new Integer(managerData[1]).intValue();
		} else {
			managerPort = DEFAULTPORT; 
		}
		
		try {
			FDLindaNode node = new FDLindaNode(DEFAULTPORT);
			MetaEngine me = new MetaProtocolEngine(port, node.getMetaLinda(), managerHostName, managerPort);
			node.setMetaEngine(me);
			node.mainLoop();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}