view src/alice/test/dpp/codesegment/philosophy/TakeForkCodeSegment.java @ 31:b815328a8d42 draft

modified TakeForkCodeSegment
author one
date Tue, 29 Jan 2013 17:31:01 +0900
parents f77f0bb99f35
children
line wrap: on
line source

package alice.test.dpp.codesegment.philosophy;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import alice.test.dpp.datasegment.Fork;
import alice.test.dpp.datasegment.Philosophy;

public class TakeForkCodeSegment extends CodeSegment {

	Receiver arg1 = ids.create(CommandType.TAKE);
	Receiver arg2 = ids.create(CommandType.TAKE);
	Receiver arg3 = ids.create(CommandType.TAKE);

	public TakeForkCodeSegment(String pName, String rFork, String lFork) {
		arg1.setKey(pName);
		// dead lock
		arg2.setKey(rFork);
		arg3.setKey(lFork);
	}
	
	@Override
	public void run() {
		Philosophy phil = arg1.asClass(Philosophy.class);
		Fork rightFork = arg2.asClass(Fork.class);
		Fork leftFork = arg3.asClass(Fork.class);
		System.out.println(phil.getName() + " is trying to take the fork.");
		new EatCodeSegment(phil.getName());
		ods.update("local", phil.getName(), phil);
		ods.update("local", leftFork.getForkName(), leftFork);
		ods.update("local", rightFork.getForkName(), rightFork);
/*		
		if (leftFork.takeFork(phil.getName()) && rightFork.takeFork(phil.getName()) ) {
			phil.setState(Philosophy.State.EAT);
			new EatCodeSegment(phil.getName());
		} else {
//			leftFork.onTheTable(phil.getName());
//			rightFork.onTheTable(phil.getName());
			new TakeForkCodeSegment(phil.getName(), phil.getRightFork(), phil.getLeftFork());
		}
*/
		
	}
}