annotate src/main/java/alice/daemon/Connection.java @ 417:aadea6a59376 dispose

create MetaCodeSegment use reflection
author sugi
date Tue, 15 Jul 2014 00:06:10 +0900
parents 8f71c3e6f11d
children aefbe41fcf12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.daemon;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
3 import java.io.IOException;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4 import java.net.Socket;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import java.nio.ByteBuffer;
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
6 import java.nio.channels.ClosedChannelException;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7 import java.util.concurrent.LinkedBlockingQueue;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
8
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
9 import alice.codesegment.SingletonMessage;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
10 import alice.datasegment.Command;
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
11 import alice.datasegment.DataSegment;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 public class Connection {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 public Socket socket;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
16 public LinkedBlockingQueue<Command> sendQueue = new LinkedBlockingQueue<Command>();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
17
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
18 public Connection(Socket socket) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
19 this.socket = socket;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
20 }
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
21
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
22 public Connection() {}
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
23
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
24 public void sendCommand(Command cmd) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
25 try {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
26 sendQueue.put(cmd);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
27 } catch (InterruptedException e) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
28 e.printStackTrace();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
29 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
30 }
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
31
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
32 public String getInfoString() {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
33 return socket.getInetAddress().getHostName()
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
34 + ":" + socket.getPort();
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
35 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
36
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
37 public synchronized void write(Command cmd) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
38 CommandMessage cmdMsg = cmd.convert();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
39 ByteBuffer buffer;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
40 try {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
41 buffer = ByteBuffer.wrap(SingletonMessage.getInstance().write(cmdMsg));
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
42 while (buffer.hasRemaining()) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
43 socket.getChannel().write(buffer);
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
44 }
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
45 } catch (ClosedChannelException e) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
46 // when put dataSegment to remote if connection close this dataSemgent put.
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
47 putConnectionInfo();
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
48
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
49 } catch (IOException e) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
50 e.printStackTrace();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
51 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
52 }
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
53
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
54 public void close(){
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
55 try {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
56 socket.shutdownOutput();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
57 socket.shutdownInput();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
58 socket.close();
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
59 } catch (ClosedChannelException e) {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
60 putConnectionInfo();
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
61 } catch (IOException e) {
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
62 e.printStackTrace();
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
63 }
417
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
64
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
65 }
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
66
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
67 public void putConnectionInfo() {
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
68 ConnectionInfo c = new ConnectionInfo(socket.getInetAddress().toString() ,socket.getPort());
aadea6a59376 create MetaCodeSegment use reflection
sugi
parents: 345
diff changeset
69 DataSegment.getLocal().put("disconnect", c);
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
70
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
71 }
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
72 }