root / src / channels / MdrChannel.java @ 1
History | View | Annotate | Download (2.86 KB)
1 |
package channels; |
---|---|
2 |
|
3 |
import peer.Peer; |
4 |
import utils.FileController; |
5 |
import utils.Utils; |
6 |
|
7 |
import java.io.*; |
8 |
import java.net.DatagramPacket; |
9 |
|
10 |
public class MdrChannel implements Runnable{ |
11 |
public void run(){ |
12 |
while(true){ |
13 |
byte[] buf = new byte[64000 + 1000]; |
14 |
DatagramPacket receivePacket = new DatagramPacket(buf, buf.length); |
15 |
try{
|
16 |
Utils.mdrSocket.receive(receivePacket); |
17 |
String received = new String(receivePacket.getData(),0,receivePacket.getLength()); |
18 |
|
19 |
String[] receivedArray = received.split("\\r\\n\\r\\n"); |
20 |
int offsetOfBody = receivedArray[0].length() + 4; |
21 |
byte[] bodyByteArray = getArrayFromOffset(receivePacket.getData(), offsetOfBody, receivePacket.getLength()); |
22 |
|
23 |
FileController receivedFile = new FileController(receivedArray, bodyByteArray);
|
24 |
|
25 |
if(Peer.getSenderId() == Utils.restorePeer){ //save to init peer |
26 |
saveFile(receivedFile); |
27 |
} |
28 |
} catch (IOException e) { |
29 |
e.printStackTrace(); |
30 |
} |
31 |
} |
32 |
} |
33 |
|
34 |
private byte[] getArrayFromOffset(byte[] data, int offsetOfBody, int length) { |
35 |
int size = length - offsetOfBody;
|
36 |
byte[] toRet = new byte[size]; |
37 |
|
38 |
for(int i = offsetOfBody; i < length; i++) { |
39 |
toRet[i - offsetOfBody] = data[i]; |
40 |
} |
41 |
|
42 |
return toRet;
|
43 |
} |
44 |
|
45 |
private void saveFile(FileController receivedFile) throws IOException { |
46 |
|
47 |
File theDir = new File("storage/Restored"); |
48 |
|
49 |
// if the directory does not exist, create it
|
50 |
if (!theDir.exists()) {
|
51 |
boolean result = false; |
52 |
|
53 |
try{
|
54 |
theDir.mkdir(); |
55 |
result = true;
|
56 |
} |
57 |
catch(SecurityException se){ |
58 |
} |
59 |
if(result) {
|
60 |
} |
61 |
} |
62 |
|
63 |
File dir = new File("storage/Restored/Peer" + Peer.getSenderId()); |
64 |
|
65 |
// if the directory does not exist, create it
|
66 |
if (!dir.exists()) {
|
67 |
boolean result = false; |
68 |
|
69 |
try{
|
70 |
dir.mkdir(); |
71 |
result = true;
|
72 |
} |
73 |
catch(SecurityException se){ |
74 |
} |
75 |
if(result) {
|
76 |
} |
77 |
} |
78 |
|
79 |
File f = new File("storage/Restored/Peer" + Peer.getSenderId() + "/" + receivedFile.getChunkNo()); |
80 |
|
81 |
if(!f.exists()) { //if file is not saved yet by other peer... |
82 |
f.createNewFile(); |
83 |
} |
84 |
OutputStream out = new FileOutputStream(f); |
85 |
out.write(receivedFile.getBody(), 0, receivedFile.getBody().length);
|
86 |
out.close(); |
87 |
Utils.chunkReceived = true;
|
88 |
} |
89 |
|
90 |
public static void sendMessage(byte[] buf) throws IOException { |
91 |
DatagramPacket packet = new DatagramPacket(buf, buf.length, Peer.getMdrAddress(), Peer.getMdrPort()); |
92 |
Utils.mdrSocket.send(packet); |
93 |
} |
94 |
} |