view src/main/java/suikwasha/distributedalgorithm/simulator/LoggingMessageLinkBuilder.java @ 0:38a110b13db1

added SimpleDistributedAlgorithmFramework. added NaiveAlgorithm added ChangRobertsAlgorithm added PertersonAlgorithm
author suikwasha
date Fri, 19 Oct 2012 00:05:41 +0900
parents
children 8e1f63faa2fd
line wrap: on
line source

package suikwasha.distributedalgorithm.simulator;

import suikwasha.distributedalgorithm.framework.Link;
import suikwasha.distributedalgorithm.framework.LinkBuilder;
import suikwasha.distributedalgorithm.framework.Message;
import suikwasha.distributedalgorithm.framework.Port;

public class LoggingMessageLinkBuilder implements LinkBuilder
{
	private final LinkBuilder builder;
	private final Summary summary;
	
	public LoggingMessageLinkBuilder(Summary _summary,LinkBuilder _builder)
	{
		summary = _summary;
		builder = _builder;
	}

	public Link build()
	{
		return new LoggingLink(summary,builder.build());
	}
	
	public static class LoggingLink implements Link
	{
		private Link link;
		private Summary summary;
		
		public LoggingLink(Summary _summary,Link _link)
		{
			summary = _summary;
			link = _link;
		}
		
		public Port getPort1()
		{
			return new LoggingPort(summary,link.getPort1());
		}

		public Port getPort2()
		{
			return new LoggingPort(summary,link.getPort2());
		}
	}
	
	public static class LoggingPort implements Port
	{
		private Summary summary;
		private Port port;
		
		public LoggingPort(Summary _summary,Port _port)
		{
			summary = _summary;
			port = _port;
		}
		
		public void send(Message _mes)
		{
			long bits = _mes.getMessage().limit();
			summary.addMessageBitCount(bits);
			summary.incrementMessageCount();
			summary.trySetMessageChain(_mes.getMessageChain());
			
			port.send(_mes);
		}

		public Message blockingReceive() throws InterruptedException
		{
			return port.blockingReceive();
		}

		public Message tryReceive()
		{
			return port.tryReceive();
		}
	}
}