Project

General

Profile

Statistics
| Revision:

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
}