Project

General

Profile

Revision 2

ola

View differences:

src/Channel/Channel.java
4 4
import Peers.Peer;
5 5

  
6 6
import java.io.IOException;
7
import java.io.Serializable;
7 8
import java.net.*;
8 9
import java.util.concurrent.TimeUnit;
9 10

  
10
public class Channel implements Runnable {
11
public class Channel implements Runnable, Serializable {
11 12

  
12 13
    Peer peer;
13 14

  
......
34 35

  
35 36
        } catch (UnknownHostException e) {
36 37

  
37
            e.printStackTrace();
38 38

  
39 39
        }
40 40

  
......
48 48

  
49 49
            byte[] mes = message.messagePacket();
50 50
            DatagramPacket data = new DatagramPacket(mes, mes.length, this.address, this.port);
51
            System.out.println("Sending " + message.getType().toString() + " Packet");
51 52
            socket.send(data);
52 53
        } catch (IOException e) {
53 54
            e.printStackTrace();
src/compile.sh
1
#!/usr/bin/env bash
2
javac TestApp.java
3
javac Peers/Peer.java
src/Message/Message.java
61 61
        try {
62 62
            String head = buffer.readLine();
63 63
            int size = head.length() + 4;
64
            System.out.println("Size = " + size);
65
            System.out.println("MSlength = " + messageLength);
66 64

  
65

  
67 66
            this.body = new byte[messageLength - size];
68 67
            System.arraycopy(data, size, this.body, 0, messageLength - size);
69 68

  
70
            System.out.println("body size = " + this.body.length);
71 69

  
72

  
73

  
74 70
            String[] l = head.split(" ");
75 71
            ms(l);
76 72

  
......
80 76

  
81 77

  
82 78
        } catch (IOException e) {
83
            e.printStackTrace();
79
            //e.printStackTrace();
84 80
        }
85 81

  
86 82
    }
......
160 156

  
161 157
            return messageByte;
162 158
        } catch (Exception e) {
163
            e.printStackTrace();
159
           // e.printStackTrace();
164 160
        }
165 161
        return null;
166 162
    }
src/Message/WorkMessage.java
12 12
    public WorkMessage(DatagramPacket packet, Peer peer) {
13 13
        try {
14 14
            this.packet = new Message(packet);
15
            System.out.println("Received " + this.packet.getType().toString() + " Packet");
16

  
15 17
        } catch (Exception e) {
16
            e.printStackTrace();
18
            //e.printStackTrace();
17 19
        }
18 20

  
19 21
        this.peer = peer;
src/Peers/Control.java
3 3
import Message.*;
4 4
import Storage.Chunk;
5 5

  
6
import java.io.Serializable;
6 7
import java.util.*;
7 8
import java.util.concurrent.ConcurrentHashMap;
8 9
import java.util.concurrent.ConcurrentSkipListSet;
9 10
import java.util.concurrent.TimeUnit;
10 11

  
11 12

  
12
public class Control {
13
public class Control implements Serializable {
13 14

  
14 15
    // chunkNo + fileid, nÂș of stored
15 16
    ConcurrentHashMap<String, Integer> storedMessages = new ConcurrentHashMap<>();
......
20 21
    ConcurrentHashMap<String, ConcurrentSkipListSet<Chunk>> restoredChunks = new ConcurrentHashMap<>();
21 22

  
22 23

  
24
    ConcurrentHashMap<String, String> backedUpFiles = new ConcurrentHashMap<>();
25

  
23 26
    private Peer peer;
24 27

  
25 28
    Control(Peer peer) {
......
51 54

  
52 55
        } catch (Exception e) {
53 56

  
54
            e.printStackTrace();
57
         //   e.printStackTrace();
55 58
        }
56 59

  
57 60
    }
......
107 110
                }
108 111
            }
109 112
        } catch (Exception e) {
110
            e.printStackTrace();
113
            //e.printStackTrace();
111 114
        }
112 115
    }
113 116

  
......
170 173

  
171 174

  
172 175
    }
176

  
177
    public ConcurrentHashMap<String, String> getBackedUpFiles() {
178
        return backedUpFiles;
179
    }
180

  
173 181
}
src/Peers/Peer.java
1 1
package Peers;
2 2

  
3 3

  
4
import java.io.FileOutputStream;
5
import java.io.IOException;
6
import java.io.ObjectOutputStream;
7
import java.io.Serializable;
4
import java.io.*;
8 5
import java.rmi.RemoteException;
9 6
import java.rmi.registry.LocateRegistry;
10 7
import java.rmi.registry.Registry;
......
46 43

  
47 44
    Control control;
48 45

  
49
    ConcurrentHashMap<String, String> backedUpFiles = new ConcurrentHashMap<>();
50 46

  
51 47
    public Peer(String version, String peerId, String remoteName, String mcAddr, int mcPort, String mdbAddr, int mdbPort, String mdrAddr, int mdrPort) {
52 48

  
......
60 56
            mc_channel = new Channel(mcAddr, mcPort, this);
61 57
            mdb_channel = new Channel(mdbAddr, mdbPort, this);
62 58
            mdr_channel = new Channel(mdrAddr, mdrPort, this);
63
            this.control = new Control(this);
59

  
60
            if(!loadStatus())
61
                this.control = new Control(this);
62

  
63
            // save data every 2 seconds
64
            threadPool.scheduleAtFixedRate(() -> {
65
                this.saveState();
66
            }, 0, 2, TimeUnit.SECONDS);
67

  
64 68
        } catch (IOException e) {
65
            e.printStackTrace();
69
           // e.printStackTrace();
66 70
        }
67 71

  
68 72

  
......
117 121
        Peer peer = null;
118 122

  
119 123
        try {
124

  
120 125
            peer = new Peer(args[0], args[1], args[2], args[3], Integer.parseInt(args[4]), args[5], Integer.parseInt(args[6]), args[7], Integer.parseInt(args[8]));
121 126
            Service serv = (Service) UnicastRemoteObject.exportObject(peer, 0);
122 127
            Registry registry = LocateRegistry.getRegistry();
......
129 134
        try {
130 135
            peer.threadPool.awaitTermination(1, TimeUnit.DAYS);
131 136
        } catch (Exception e) {
132
            e.printStackTrace();
137
          //  e.printStackTrace();
133 138
        }
134 139
    }
135 140

  
......
165 170
        return control;
166 171
    }
167 172

  
168
    public ConcurrentHashMap<String, String> getBackedUpFiles() {
169
        return backedUpFiles;
170
    }
171 173

  
172 174
    private void saveState() {
173 175
        try {
174
            FileOutputStream file = new FileOutputStream(Paths.get(System.getProperty("user.dir")).toString() + "/objs/");
175 176

  
176
            ObjectOutputStream out = new ObjectOutputStream(file);
177
            FileOutputStream fileCtrl = new FileOutputStream(Paths.get(System.getProperty("user.dir")).toString() + "/objs/" + id + "Ctrl.ser");
178

  
179
            ObjectOutputStream out2 = new ObjectOutputStream(fileCtrl);
180

  
181
            out2.writeObject(this.control);
182

  
183
            out2.close();
184
            fileCtrl.close();
177 185
        } catch (IOException e) {
178
            e.printStackTrace();
186
            new File(Paths.get(System.getProperty("user.dir")).toString() + "/objs").mkdir();
187
            try {
188
                new File(Paths.get(System.getProperty("user.dir")).toString() + "/objs/" + id + "Ctrl.ser").createNewFile();
189
            } catch (IOException e1) {
190
               // e1.printStackTrace();
191
            }
192

  
193
            //e.printStackTrace();
179 194
        }
180 195
    }
181 196

  
197
    private boolean loadStatus() {
198

  
199
        try {
200
            FileInputStream fileCtrl = new FileInputStream(Paths.get(System.getProperty("user.dir")).toString() + "/objs/" + id + "Ctrl.ser");
201

  
202
            ObjectInputStream obj2 = new ObjectInputStream(fileCtrl);
203
            this.control = (Control) obj2.readObject();
204

  
205
            obj2.close();
206
            fileCtrl.close();
207
            return true;
208
        } catch (Exception e) {
209
            System.out.println("no files found");
210
        }
211

  
212
        return false;
213
    }
214

  
182 215
}
183 216

  
184 217

  
src/Protocols/BackUpProtocol.java
65 65
        try {
66 66
            String id = calculateFileId(peer, filepath);
67 67
            String[] name = filepath.split("/");
68
            peer.getBackedUpFiles().put(name[name.length - 1], id);
68
            peer.getControl().getBackedUpFiles().put(name[name.length - 1], id);
69 69

  
70 70

  
71 71

  
......
85 85
                }
86 86
                for (Message k : messages) {
87 87
                    peer.getMdb_channel().send(k);
88
                    System.out.println("sending...");
89 88
                }
90 89
                i++;
91 90
            } while (confirmMessage(messages, sleep));
src/Protocols/DeleteProtocol.java
19 19
    @Override
20 20
    public void run() {
21 21
        String[] name = filepath.split("/");
22
        String fid = this.peer.getBackedUpFiles().get(name[name.length - 1]);
22
        String fid = this.peer.getControl().getBackedUpFiles().get(name[name.length - 1]);
23 23

  
24 24

  
25 25
        File n = new File(filepath);
26
        Message ms = new DeleteMsg(peer.getVersionProtocol(), peer.getId(), peer.getBackedUpFiles().get(name[name.length - 1]));
26
        Message ms = new DeleteMsg(peer.getVersionProtocol(), peer.getId(), peer.getControl().getBackedUpFiles().get(name[name.length - 1]));
27 27

  
28 28
        peer.getMc_channel().send(ms);
29

  
30
        System.out.println("Deleted");
29 31
    }
30 32
}
src/Protocols/RestoreProtocol.java
44 44

  
45 45
        String[] name = file.split("/");
46 46

  
47
        if (!peer.getBackedUpFiles().containsKey(name[name.length - 1])) {
47
        if (!peer.getControl().getBackedUpFiles().containsKey(name[name.length - 1])) {
48 48
            System.out.println("wrong in ");
49 49
            return;
50 50
        }
......
58 58
            return;
59 59
        }
60 60

  
61
        ArrayList<Message> messages = createMessages(size, peer.getBackedUpFiles().get(name[name.length - 1]));
61
        ArrayList<Message> messages = createMessages(size, peer.getControl().getBackedUpFiles().get(name[name.length - 1]));
62 62

  
63 63

  
64 64
        do {
......
83 83
                my_stream.write(i.getInfo());
84 84
            }
85 85
            fileInfo = my_stream.toByteArray();
86
            peer.getStorage().saveFile(peer.getBackedUpFiles().get(name[name.length - 1]), fileInfo);
86
            peer.getStorage().saveFile(peer.getControl().getBackedUpFiles().get(name[name.length - 1]), fileInfo);
87 87
        } catch (Exception e) {
88 88
            e.printStackTrace();
89 89
        }
90 90

  
91
        System.out.println("Restored");
92

  
91 93
    }
92 94

  
93 95

  
src/Storage/ChunksManager.java
63 63

  
64 64
            fileInfo.close();
65 65
        } catch (IOException e) {
66
            e.printStackTrace();
66
            //e.printStackTrace();
67 67
        }
68 68
    }
69 69

  
src/Storage/FileSystem.java
24 24

  
25 25
    private String base;
26 26

  
27
    private List<Chunk> chunks;
28

  
29
    private List<String> FilesStored;
30

  
31 27
    public FileSystem(int maxSize, String directory, int peerID, Peer peer) {
32 28

  
33 29
        this.maxSize = maxSize;
......
103 99
        }
104 100
    }
105 101

  
106

  
107 102
    public boolean saveChunk(Chunk chunk, String fileId) {
108 103
        if (chunk.getInfo().length > availableSpace())
109 104
            return false;
......
137 132
        return false;
138 133
    }
139 134

  
140

  
141 135
    public HashMap<String, byte[]> getChunks(String fileId) {
142 136

  
143 137
        HashMap<String, byte[]> chunksInfo = new HashMap<>();
......
154 148
                }
155 149
            }
156 150
        } catch (Exception e) {
157
            e.printStackTrace();
151
        //    e.printStackTrace();
158 152
        }
159 153

  
160 154
        return chunksInfo;
......
169 163
            Files.createDirectories(pathres);
170 164
            Files.createDirectory(pathchunks);
171 165
        } catch (IOException e) {
172
            e.printStackTrace();
166
           // e.printStackTrace();
173 167
        }
174 168

  
175 169
    }
......
210 204
           }catch (Exception e){
211 205
               e.printStackTrace();
212 206

  
213
               System.out.println("");
214 207
           }
215 208

  
216 209
           return false;
src/Read.txt
1
Compiling:
2
javac TestApp.java
3
javac Peers/Peer.java
4

  
5
Start RMI:
6
rmiregistry
7

  
8
Run Program:
9
> Peer:
10
java Peer.Peer <version> <server_id> <access_point> <MC_IP_address> <MC_port> <MDB_IP_address> <MDB_port> <MDR_IP_address> <MDR_port>
11
E.g.: Peer 2.0 1 Peer1 224.0.0.15 8001 224.0.0.16 8002 224.0.0.17 8003
12

  
13
> Backup:
14
java TestApp <host> <peer_access_point> BACKUP <file_path> <desired_replication_degree>
15
E.g.:  App localhost Peer1 BACKUP /home/daniel/Desktop/Faculdade/SDIS/FEUP-SDIS/project1/Proj/src/test.txt 2
16

  
17
> Restore:
18
TestApp <host> <peer_access_point> RESTORE <file_path>
19
E.g.:  App localhost/Peer1 RESTORE /home/daniel/Desktop/Faculdade/SDIS/FEUP-SDIS/project1/Proj/src/test.txt
20

  
21
> Delete:
22
java TestApp <host> <peer_access_point> DELETE <file_path>
23
E.g.:  App localhost/Peer1 DELETE /home/daniel/Desktop/Faculdade/SDIS/FEUP-SDIS/project1/Proj/src/test.txt
24

  
25

  
src/run.sh
1
#!/usr/bin/env bash
2
java Peers.Peer "$1" "$2" "$3" "${4:-224.0.0.15}" "${5:-8001}" "${6:-224.0.0.16}" "${7:-8003}" "${8:-224.0.0.17}" "${9:-8004}" &
3

  

Also available in: Unified diff