Project

General

Profile

Statistics
| Revision:

root / src / channels / MdrChannel.java

History | View | Annotate | Download (2.86 KB)

1 1 up20140508
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
}