annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
1 package alice.daemon;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
2
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
3 import java.io.IOException;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
4 import java.nio.ByteBuffer;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
5
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
6 import org.msgpack.MessagePack;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
7
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
8 import alice.datasegment.Command;
30
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
9 import alice.datasegment.CommandType;
13
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
10
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
11 public class OutboundTcpConnection extends Thread {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
12
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
13 public Connection connection;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
14
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
15 public OutboundTcpConnection(Connection connection) {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
16 this.connection = connection;
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
17 }
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
18
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
19 public CommandMessage convert(Command cmd) {
14
e3f1b21718b0 implements RemoteDataSegment
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
20 return new CommandMessage(cmd.type.id, cmd.index, cmd.seq, cmd.key, cmd.val);
13
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
21 }
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
22
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
23 public void run() {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
24 MessagePack msgpack = new MessagePack();
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
25 while (true) {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
26 try {
30
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
27 Command cmd = connection.sendQueue.take();
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
28 if (cmd.type == CommandType.FINISH) {
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
29 System.exit(0);
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
30 return;
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
31 }
b5a21baf0b07 implements RingTopology
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
32 CommandMessage cmdMsg = convert(cmd);
13
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
33 byte[] buf = msgpack.write(cmdMsg);
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
34 ByteBuffer buffer = ByteBuffer.allocateDirect(4 + buf.length);
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
35 buffer.putInt(buf.length);
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
36 buffer.put(buf);
16
433e601a8e28 network bug fix
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
37 buffer.flip();
13
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
38 connection.socket.getChannel().write(buffer);
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
39 } catch (InterruptedException e) {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
40 e.printStackTrace();
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
41 } catch (IOException e) {
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
42 e.printStackTrace();
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
43 }
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
44 }
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
45 }
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
46
30f97d776a3e implements Alice daemon
one
parents:
diff changeset
47 }