root / src / message / Message.java @ 2
History | View | Annotate | Download (3.63 KB)
1 |
package message; |
---|---|
2 |
|
3 |
import chunk.Chunk; |
4 |
import peer.Peer; |
5 |
|
6 |
import java.io.ByteArrayOutputStream; |
7 |
import java.io.IOException; |
8 |
|
9 |
public class Message { |
10 |
|
11 |
public static final int MESSAGE_PACKET_MAX_SIZE = Chunk.CHUNK_MAX_SIZE + MessageHeader.MESSAGE_HEADER_MAX_SIZE; |
12 |
|
13 |
private MessageHeader header;
|
14 |
private byte[] body; |
15 |
|
16 |
public Message(byte[] data) { |
17 |
String rawMessage = new String(data); |
18 |
int index = rawMessage.indexOf(MessageHeader.CRLF) + 4; |
19 |
byte[] rawHeader = new byte[index+1]; |
20 |
System.arraycopy(data, 0, rawHeader, 0, index - 4); |
21 |
header = new MessageHeader(new String(rawHeader)); |
22 |
int bodyLength = data.length - index;
|
23 |
body = new byte[bodyLength]; |
24 |
System.arraycopy(data, index, body, 0, bodyLength); |
25 |
} |
26 |
|
27 |
public Message(MessageHeader header, byte[] body) { |
28 |
this.header = header;
|
29 |
this.body = body;
|
30 |
} |
31 |
|
32 |
public byte[] toBytes() throws IOException { |
33 |
byte[] result; |
34 |
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
35 |
bos.write(header.toString().getBytes()); |
36 |
if (body != null) |
37 |
bos.write(body); |
38 |
result = bos.toByteArray(); |
39 |
return result;
|
40 |
} |
41 |
|
42 |
public MessageHeader getHeader() {
|
43 |
return header;
|
44 |
} |
45 |
|
46 |
public byte[] getBody() { |
47 |
return body;
|
48 |
} |
49 |
|
50 |
/*
|
51 |
* public static boolean isValid(String message) { String myString =
|
52 |
* message.substring(0,message.indexOf("\r\n\r\n"));
|
53 |
*
|
54 |
* return
|
55 |
* myString.matches(".* [0-9].[0-9] [0-9]+ .{32} .{6} [0-9]\r\n\r\n(.*)?"); }
|
56 |
*/
|
57 |
|
58 |
public static Message parsePutChunkMessage(Chunk chunk, Peer peer) { |
59 |
MessageHeader header = new MessageHeader("PUTCHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo(), |
60 |
chunk.getRepDegree()); |
61 |
Message message = new Message(header, chunk.getData());
|
62 |
|
63 |
return message;
|
64 |
} |
65 |
|
66 |
public static Message parseStoredMessage(Chunk chunk, Peer peer) { |
67 |
try {
|
68 |
MessageHeader header = new MessageHeader("STORED", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo()); |
69 |
Message message = new Message(header, null); |
70 |
return message;
|
71 |
} catch (InvalidHeaderParameters e) {
|
72 |
e.printStackTrace(); |
73 |
} |
74 |
return null; |
75 |
} |
76 |
|
77 |
public static Message parseDeleteMessage(String fileId, Peer peer) { |
78 |
try {
|
79 |
MessageHeader header = new MessageHeader("DELETE", peer.getpVersion(), peer.getPeerId(), fileId); |
80 |
Message message = new Message(header, null); |
81 |
return message;
|
82 |
} catch (InvalidHeaderParameters e) {
|
83 |
e.printStackTrace(); |
84 |
} |
85 |
return null; |
86 |
} |
87 |
|
88 |
public static Message parseGetChunkMessage(String fileId, int chunkNo, Peer peer) { |
89 |
try {
|
90 |
MessageHeader header = new MessageHeader("GETCHUNK", peer.getpVersion(), peer.getPeerId(), fileId, chunkNo); |
91 |
Message message = new Message(header, null); |
92 |
return message;
|
93 |
} catch (InvalidHeaderParameters e) {
|
94 |
e.printStackTrace(); |
95 |
} |
96 |
return null; |
97 |
} |
98 |
|
99 |
public static Message parseChunkMessage(Chunk chunk, Peer peer) { |
100 |
try {
|
101 |
MessageHeader header = new MessageHeader("CHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo()); |
102 |
Message message = new Message(header, chunk.getData());
|
103 |
return message;
|
104 |
} catch (InvalidHeaderParameters e) {
|
105 |
e.printStackTrace(); |
106 |
} |
107 |
return null; |
108 |
} |
109 |
|
110 |
} |