view src/alice/daemon/OutboundTcpConnection.java @ 30:b5a21baf0b07

implements RingTopology
author kazz <kazz@cr.ie.u-ryukyu.ac.jp>
date Tue, 17 Jan 2012 16:13:03 +0900
parents 433e601a8e28
children f9334781344a
line wrap: on
line source

package alice.daemon;

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

import org.msgpack.MessagePack;

import alice.datasegment.Command;
import alice.datasegment.CommandType;

public class OutboundTcpConnection extends Thread {
	
	public Connection connection;
	
	public OutboundTcpConnection(Connection connection) {
		this.connection = connection;
	}
	
	public CommandMessage convert(Command cmd) {
		return new CommandMessage(cmd.type.id, cmd.index, cmd.seq, cmd.key, cmd.val);
	}
	
	public void run() {
		MessagePack msgpack = new MessagePack();
		while (true) {
			try {
				Command cmd = connection.sendQueue.take();
				if (cmd.type == CommandType.FINISH) {
					System.exit(0);
					return;
				}
				CommandMessage cmdMsg = convert(cmd);
				byte[] buf = msgpack.write(cmdMsg);
				ByteBuffer buffer = ByteBuffer.allocateDirect(4 + buf.length);
				buffer.putInt(buf.length);
				buffer.put(buf);
				buffer.flip();
				connection.socket.getChannel().write(buffer);
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}