Line data Source code
1 : /*
2 : * Package : mqtt_client
3 : * Author : S. Hamblett <steve.hamblett@linux.com>
4 : * Date : 31/05/2017
5 : * Copyright : S.Hamblett
6 : */
7 :
8 : part of mqtt_client;
9 :
10 : /// Represents an MQTT message that contains a fixed header, variable header and message body.
11 : /// Messages roughly look as follows.
12 : /// ----------------------------
13 : /// | Header, 2-5 Bytes Length |
14 : /// ----------------------------
15 : /// | Variable Header(VH) |
16 : /// | n Bytes Length |
17 : /// ----------------------------
18 : /// | Message Payload |
19 : /// | 256MB minus VH Size |
20 : /// ----------------------------
21 :
22 : class MqttMessage {
23 : /// The header of the MQTT Message. Contains metadata about the message
24 : MqttHeader header;
25 :
26 : /// Initializes a new instance of the MqttMessage class.
27 6 : MqttMessage();
28 :
29 : /// Initializes a new instance of the MqttMessage class.
30 0 : MqttMessage.fromHeader(MqttHeader header) {
31 : header = header;
32 : }
33 :
34 : /// Creates a new instance of an MQTT Message based on a raw message stream.
35 : static MqttMessage createFrom(MqttByteBuffer messageStream) {
36 : try {
37 4 : MqttHeader header = new MqttHeader();
38 : // Pass the input stream sequentially through the component deserialization(create) methods
39 : // to build a full MqttMessage.
40 4 : header = new MqttHeader.fromByteBuffer(messageStream);
41 : final MqttMessage message =
42 4 : MqttMessageFactory.getMessage(header, messageStream);
43 : return message;
44 : } catch (InvalidHeaderException) {
45 1 : throw new InvalidMessageException(
46 : "The data provided in the message stream was not a valid MQTT Message");
47 : }
48 : }
49 :
50 : /// Writes the message to the supplied stream.
51 : void writeTo(MqttByteBuffer messageStream) {
52 8 : header.writeTo(0, messageStream);
53 : }
54 :
55 : /// Reads a message from the supplied stream.
56 : void readFrom(MqttByteBuffer messageStream) {}
57 :
58 : String toString() {
59 6 : final StringBuffer sb = new StringBuffer();
60 6 : sb.write("MQTTMessage of type ");
61 24 : sb.writeln(this.header.messageType.toString());
62 18 : sb.writeln(header.toString());
63 6 : return sb.toString();
64 : }
65 : }
|