root / threads / messageManagement.java @ 15
History | View | Annotate | Download (3.46 KB)
1 |
package threads; |
---|---|
2 |
|
3 |
import java.util.ArrayList; |
4 |
import server.Server; |
5 |
import java.util.Arrays; |
6 |
import java.util.List; |
7 |
import java.util.Random; |
8 |
import java.util.concurrent.TimeUnit; |
9 |
|
10 |
public class messageManagement implements Runnable{ |
11 |
private byte[] msg; |
12 |
|
13 |
public messageManagement(byte[] msg) { |
14 |
this.msg = msg;
|
15 |
|
16 |
} |
17 |
|
18 |
@Override
|
19 |
public void run() { |
20 |
|
21 |
List<byte[]> HB = getHeaderNBody(); |
22 |
byte[] header = HB.get(0); |
23 |
byte[] body = HB.get(1); |
24 |
|
25 |
String message = new String(this.msg, 0, this.msg.length); |
26 |
String[] newMessage = message.split(" "); |
27 |
|
28 |
String messageType = newMessage[0]; |
29 |
Double version = Double.parseDouble(newMessage[1]); |
30 |
int senderID = Integer.parseInt(newMessage[2]); |
31 |
String fileID = newMessage[3]; |
32 |
int chunkNr = Integer.parseInt(newMessage[4]); |
33 |
int replicationDegree = Integer.parseInt(newMessage[5]); |
34 |
|
35 |
|
36 |
//removeBlanks(newMessage);
|
37 |
|
38 |
|
39 |
|
40 |
switch (newMessage[0]) { |
41 |
case "PUTCHUNK": |
42 |
putchunkOperation(version, fileID, chunkNr, replicationDegree, body); |
43 |
break;
|
44 |
case "GETCHUNK": |
45 |
getchunkOperation(version, senderID, fileID, chunkNr); |
46 |
break;
|
47 |
case "DELETE": |
48 |
deleteOperation(version, senderID, fileID); |
49 |
break;
|
50 |
case "REMOVED": |
51 |
removedOperation(version, senderID, fileID, chunkNr); |
52 |
break;
|
53 |
case "STORED": |
54 |
storedOperation(version, senderID, fileID, chunkNr); |
55 |
break;
|
56 |
|
57 |
} |
58 |
|
59 |
} |
60 |
|
61 |
private void deleteOperation(Double version, int senderID, String fileID) { |
62 |
if (Integer.parseInt(fileID) != senderID) { |
63 |
Server.getStorage().deleteStoredChunks(fileID); |
64 |
System.out.println("Received DELETE " + version + " " + senderID + " " + fileID); |
65 |
} |
66 |
} |
67 |
|
68 |
private void removedOperation(Double version, int senderID, String fileID, int chunkNr) { |
69 |
} |
70 |
|
71 |
private void getchunkOperation(Double version, int senderID, String fileID, int chunkNr) { |
72 |
if (Integer.parseInt(fileID) != senderID) { |
73 |
Random random = new Random(); |
74 |
System.out.println("Received GETCHUNK " + version + " " + senderID + " " + fileID + " " + chunkNr); |
75 |
Server.getThreadLauncher().schedule(new ReceiveGetChunk(fileID, chunkNr), random.nextInt(401), TimeUnit.MILLISECONDS); |
76 |
} |
77 |
|
78 |
} |
79 |
|
80 |
private void storedOperation(Double version, int senderID, String fileID, int chunkNr) { |
81 |
if (Integer.parseInt(fileID) != senderID) { |
82 |
Server.getStorage().incStoredOccurrences(fileID, chunkNr); |
83 |
System.out.println("Received STORED " + version + " " + senderID + " " + fileID + " " + chunkNr); |
84 |
} |
85 |
|
86 |
} |
87 |
|
88 |
private void putchunkOperation(Double version, String fileID, int chunkNr, int replicationDegree, byte[] body) { |
89 |
Random r = new Random(); |
90 |
System.out.println("Received PUTCHUNK " + version + " " + fileID + " " + chunkNr); |
91 |
Server.getThreadLauncher().schedule(new ReceivePutchunk(version, fileID, chunkNr, replicationDegree, body), r.nextInt(401), TimeUnit.MILLISECONDS); |
92 |
|
93 |
} |
94 |
|
95 |
private void removeBlanks(String[] newMessage) { |
96 |
for(int i=0; i<newMessage.length; i++) { |
97 |
newMessage[i] = newMessage[i].replaceAll("\\s","" ); |
98 |
} |
99 |
|
100 |
} |
101 |
|
102 |
private List<byte[]> getHeaderNBody(){ |
103 |
|
104 |
int h = this.msg.length -4; |
105 |
|
106 |
byte[] header = Arrays.copyOfRange(this.msg, 0 ,h); |
107 |
byte[] body = Arrays.copyOfRange(this.msg, h, this.msg.length); |
108 |
|
109 |
List<byte[]> headerNBody = new ArrayList<>(); |
110 |
|
111 |
headerNBody.add(header); |
112 |
headerNBody.add(body); |
113 |
|
114 |
return headerNBody;
|
115 |
} |
116 |
|
117 |
} |