view src/alice/test/dpp/codesegment/TakeForkCodeSegment.java @ 5:2db314b1a970

add EatCodeSegment TakeForkCodeSegment, ForkState, Table
author one
date Sun, 25 Nov 2012 17:08:21 +0900
parents
children b59c04a332a1
line wrap: on
line source

package alice.test.dpp.codesegment;

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

public class TakeForkCodeSegment extends CodeSegment {

	Philosophy phil;
	Receiver arg1 = ids.create(CommandType.TAKE);
	Receiver arg2 = ids.create(CommandType.TAKE);
	
	public TakeForkCodeSegment(Philosophy p) {
		phil = p;
		arg1.setKey(phil.getLeftFork());
		arg2.setKey(phil.getRightFork());		
	}

	@Override
	public void run() {
		System.out.println(phil + " is trying to take the fork.");
		Fork leftFork = arg1.asClass(Fork.class);
		Fork rightFork = arg2.asClass(Fork.class);
		if (leftFork.getFork(phil) && rightFork.getFork(phil) ) {
			new EatCodeSegment(phil);
		} else {
			leftFork.onTheTable(phil);
			rightFork.onTheTable(phil);
		}
		ods.update("local", leftFork.getForkName(), leftFork);
		ods.update("local", rightFork.getForkName(), rightFork);
	}
	
}