view src/fdl/test/metaTransfer/Ring/MetaProtocolEngine.java @ 97:0ea086f0e96f fuchita

main loop modification, for easy meta engine addition. add comments.
author one
date Wed, 26 May 2010 10:49:50 +0900
parents 82a292aa41ad
children
line wrap: on
line source

package fdl.test.metaTransfer.Ring;

//import static org.junit.Assert.assertEquals;

import java.io.IOException;
import java.nio.ByteBuffer;

import fdl.MetaEngine;
import fdl.MetaLinda;
import fdl.PSXLinda;
import fdl.PSXReply;

public class MetaProtocolEngine implements MetaEngine {
	int id = 10;
	private boolean running = true;
	
	private PSXLinda psx;
	private String name;
	MetaLinda fdl1;
	String host = "127.0.0.1";
	int port1;
	private PSXLinda psx1;
	private ByteBuffer data = ByteBuffer.allocate(10);
//	private int count = 1;
	int port;

	
	public MetaProtocolEngine(MetaLinda ml, String string, int port1, int port) {
		this.name = string;
		this.port1 = port1;
		this.fdl1 = ml;
		this.port = port;
	}

	public void mainLoop(MetaLinda ml){
		boolean connect = true;
		System.out.println("MetaEngine Start");
		while(connect){
		try {
			initConnect();
			transfer(psx, psx1);
			connect = false;
		} catch (IOException e) {
			try {
				Thread.sleep(40);
			} catch (InterruptedException e1) {
			}
		}
		}
	}

	private void initConnect() throws IOException{
		System.out.println(name);
		//自分
		psx = fdl1;
		if (port == 10001){
			sendData();
			}
		//相手
		psx1 = fdl1.open(host,port1);
		System.out.println("Connect "+port1);
	}

	private void sendData() throws IOException{
		boolean connectSend = true;
		ByteBuffer send = ByteBuffer.allocate(1024);
		send.putInt(12);
		send.flip();
		while(connectSend){
		psx.out(id, send);
		fdl1.sync(1);
		System.out.println("Send Data 10001");
		connectSend = false;
		}
	}
	
	private void transfer(PSXLinda getpsx, PSXLinda sendpsx) throws IOException {
		PSXReply in = getpsx.in(id);
		System.out.println("PSXReply "+port1);
		while (running) {
			if(in.ready()){
				data = in.getData();
				int i = data.getInt();
				data.rewind();
				//outしたbytebufferの変更をこれ以降やっちゃいけない
				sendpsx.out(id,data);
				
				System.out.println("IntData0 "+port1 +i);
				fdl1.sync(1);
				running = false;
				System.out.println("IntData1 "+port1 +i);
				break;
			}
			fdl1.sync(0);
			}
//		assertEquals(4,count);
	}

}