Project

General

Profile

Statistics
| Revision:

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
}