root / src / protocols / BackupProtocol.java @ 1
History | View | Annotate | Download (1.99 KB)
1 | 1 | up20140508 | package protocols; |
---|---|---|---|
2 | |||
3 | import channels.MdbChannel; |
||
4 | import peer.Peer; |
||
5 | import utils.Chunk; |
||
6 | import utils.FileController; |
||
7 | import utils.Utils; |
||
8 | |||
9 | import java.io.IOException; |
||
10 | import java.security.NoSuchAlgorithmException; |
||
11 | import java.util.ArrayList; |
||
12 | |||
13 | public class BackupProtocol { |
||
14 | |||
15 | FileController file; |
||
16 | |||
17 | private int[] peers; |
||
18 | private String fileId; |
||
19 | private int chunkNo; |
||
20 | |||
21 | public BackupProtocol(String[] requestArgs) throws IOException, NoSuchAlgorithmException { |
||
22 | file = new FileController(requestArgs[0], Utils.version, Peer.getSenderId(),requestArgs[1],requestArgs[2]); |
||
23 | backUpFile(); |
||
24 | } |
||
25 | |||
26 | private void backUpFile() throws IOException, NoSuchAlgorithmException { |
||
27 | file.openStream(); |
||
28 | file.hashFileId(); |
||
29 | int size = file.getSize();
|
||
30 | this.fileId=file.getHashedFileId();
|
||
31 | sendToPeers(size); |
||
32 | } |
||
33 | |||
34 | private void sendToPeers(int size) throws IOException, NoSuchAlgorithmException { |
||
35 | |||
36 | for(int i=0; (i==0 || size > 0);i++){ |
||
37 | this.peers = new int[0]; |
||
38 | boolean done = false; |
||
39 | int attempts = 0; |
||
40 | int delay = 1000; |
||
41 | |||
42 | size -= 64000;
|
||
43 | byte[] header = file.header(i); |
||
44 | Chunk chunk = new Chunk(header,file);
|
||
45 | |||
46 | while(!done && attempts<5){ |
||
47 | System.out.println("BACKUP: Sending chunk of: " + file.getFileName() + " || Size Remaining:" + size + " || Header: " + new String(header,0,header.length)); |
||
48 | |||
49 | this.chunkNo = i;
|
||
50 | MdbChannel.sendMessage(chunk.getBuffer()); |
||
51 | try{
|
||
52 | Thread.sleep(delay);
|
||
53 | } catch(InterruptedException e){ |
||
54 | e.getCause(); |
||
55 | } |
||
56 | if(Integer.parseInt(file.getReplicationDeg()) <= this.peers.length){ |
||
57 | done = true;
|
||
58 | } |
||
59 | else{
|
||
60 | attempts++; |
||
61 | delay=2*delay;
|
||
62 | } |
||
63 | |||
64 | } |
||
65 | } |
||
66 | System.out.println(("DONE")); |
||
67 | } |
||
68 | } |