Project

General

Profile

Statistics
| Revision:

root / threads / messageManagement.java @ 15

History | View | Annotate | Download (3.46 KB)

1 15 up20160473
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
}