sdis1819-t7g02 / channels / RestoreChannel.java @ 1
History | View | Annotate | Download (2.41 KB)
1 | 1 | up20150366 | package channels; |
---|---|---|---|
2 | |||
3 | import java.io.IOException; |
||
4 | |||
5 | import protocols.SendSoredMessageProtocol; |
||
6 | import service.Cloud; |
||
7 | import service.Constants; |
||
8 | |||
9 | public class RestoreChannel extends Channel{ |
||
10 | |||
11 | private Message receivedMessage;
|
||
12 | |||
13 | public RestoreChannel(String addr, String p, Cloud f) throws IOException { |
||
14 | super(addr, p, f.getID(), f);
|
||
15 | } |
||
16 | |||
17 | public void printLog(String msg) { |
||
18 | System.out.println("MDR " + serverId + msg); |
||
19 | } |
||
20 | |||
21 | @Override
|
||
22 | public void run() |
||
23 | { |
||
24 | printLog(": UP");
|
||
25 | int messageSenderId = -1; |
||
26 | String messageType;
|
||
27 | |||
28 | try {
|
||
29 | joinChannelGroup(); |
||
30 | } catch (IOException e1) { |
||
31 | // TODO Auto-generated catch block
|
||
32 | e1.printStackTrace(); |
||
33 | } |
||
34 | |||
35 | do
|
||
36 | { |
||
37 | try
|
||
38 | { |
||
39 | receivedMessage = captureData(); |
||
40 | |||
41 | if(receivedMessage == null) { |
||
42 | printLog(" passing message.");
|
||
43 | continue;
|
||
44 | } |
||
45 | |||
46 | messageType = receivedMessage.getHeader().getMessageType(); |
||
47 | |||
48 | messageSenderId = Integer.parseInt(receivedMessage.getHeader().getSenderId());
|
||
49 | |||
50 | if(messageType.equals(Constants.CHUNK) && messageSenderId != getServerId()) {
|
||
51 | if(father.isFileChunkRegistered(receivedMessage.getHeader().getFileId(), receivedMessage.getHeader().getChunkNumber())) {
|
||
52 | //printLog(" received: " + receivedMessage.getHeader().toString());
|
||
53 | if(father.storeRestoreChunk(receivedMessage)) {
|
||
54 | SendSoredMessageProtocol mp = new SendSoredMessageProtocol(buildMessage(), father);
|
||
55 | |||
56 | mp.start(); |
||
57 | } |
||
58 | else {
|
||
59 | printLog(" ERROR: couldn't store chunk");
|
||
60 | } |
||
61 | } |
||
62 | } |
||
63 | else {
|
||
64 | //printLog(" ERROR: Invalid message header received -> " + receivedMessage.getHeader().toString());
|
||
65 | } |
||
66 | |||
67 | // leaveGroupChannel();
|
||
68 | } |
||
69 | catch(IOException e) |
||
70 | { |
||
71 | printLog(" ERROR: " + "IOException -> " + e.getMessage()); |
||
72 | } |
||
73 | } |
||
74 | while(true); |
||
75 | } |
||
76 | |||
77 | public MessageHeader buildMessage() {
|
||
78 | MessageHeader response; |
||
79 | |||
80 | response = buildResponseMessage(); |
||
81 | |||
82 | return response;
|
||
83 | } |
||
84 | |||
85 | public MessageHeader buildResponseMessage() {
|
||
86 | MessageHeader response; |
||
87 | String[] headerElements = new String[Constants.STORED_N_ARGS]; |
||
88 | |||
89 | headerElements[0] = Constants.CHUNK;
|
||
90 | headerElements[1] = father.getProtocolVersion();
|
||
91 | headerElements[2] = Integer.toString(father.getID()); |
||
92 | headerElements[3] = receivedMessage.getHeader().getFileId();
|
||
93 | headerElements[4] = receivedMessage.getHeader().getChunkNumber();
|
||
94 | |||
95 | response = new MessageHeader(headerElements);
|
||
96 | |||
97 | return response;
|
||
98 | } |
||
99 | |||
100 | } |