sdis1819-t7g02 / channels / RestoreChannel.java
History | View | Annotate | Download (2.41 KB)
1 |
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 |
} |