Line data Source code
1 : /*
2 : * Package : mqtt_client
3 : * Author : S. Hamblett <steve.hamblett@linux.com>
4 : * Date : 12/06/2017
5 : * Copyright : S.Hamblett
6 : */
7 :
8 : part of mqtt_client;
9 :
10 : /// Class that contains details related to an MQTT Connect messages payload.
11 : class MqttConnectPayload extends MqttPayload {
12 : /// Initializes a new instance of the MqttConnectPayload class.
13 4 : MqttConnectPayload(MqttConnectVariableHeader variableHeader) {
14 4 : this.variableHeader = variableHeader;
15 : }
16 :
17 : /// Initializes a new instance of the MqttConnectPayload class.
18 : MqttConnectPayload.fromByteBuffer(MqttConnectVariableHeader variableHeader,
19 4 : MqttByteBuffer payloadStream) {
20 4 : this.variableHeader = variableHeader;
21 4 : readFrom(payloadStream);
22 : }
23 :
24 : String _clientIdentifier = "";
25 :
26 4 : String get clientIdentifier => _clientIdentifier;
27 :
28 : set clientIdentifier(String id) {
29 8 : if (id.length > Constants.maxClientIdentifierLength) {
30 0 : throw new ClientIdentifierException(id);
31 : }
32 8 : if (id.length > Constants.maxClientIdentifierLengthSpec) {
33 0 : MqttLogger.log(
34 : "MqttConnectPayload::Client id exceeds spec value of ${Constants
35 : .maxClientIdentifierLengthSpec}");
36 : }
37 4 : _clientIdentifier = id;
38 : }
39 :
40 : MqttConnectVariableHeader variableHeader = new MqttConnectVariableHeader();
41 : String _username;
42 :
43 1 : String get username => _username;
44 :
45 2 : set username(String name) => _username = name != null ? name.trim() : name;
46 : String _password;
47 :
48 1 : String get password => _password;
49 :
50 2 : set password(String pwd) => _password = pwd != null ? pwd.trim() : pwd;
51 : String willTopic;
52 : String willMessage;
53 :
54 : /// Creates a payload from the specified header stream.
55 : void readFrom(MqttByteBuffer payloadStream) {
56 8 : clientIdentifier = payloadStream.readMqttStringM();
57 12 : if (this.variableHeader.connectFlags.willFlag) {
58 2 : willTopic = payloadStream.readMqttStringM();
59 2 : willMessage = payloadStream.readMqttStringM();
60 : }
61 12 : if (variableHeader.connectFlags.usernameFlag) {
62 0 : username = payloadStream.readMqttStringM();
63 : }
64 12 : if (variableHeader.connectFlags.passwordFlag) {
65 0 : password = payloadStream.readMqttStringM();
66 : }
67 : }
68 :
69 : /// Writes the connect message payload to the supplied stream.
70 : void writeTo(MqttByteBuffer payloadStream) {
71 8 : payloadStream.writeMqttStringM(clientIdentifier);
72 12 : if (variableHeader.connectFlags.willFlag) {
73 2 : payloadStream.writeMqttStringM(willTopic);
74 2 : payloadStream.writeMqttStringM(willMessage);
75 : }
76 12 : if (variableHeader.connectFlags.usernameFlag) {
77 0 : payloadStream.writeMqttStringM(username);
78 : }
79 12 : if (variableHeader.connectFlags.passwordFlag) {
80 0 : payloadStream.writeMqttStringM(password);
81 : }
82 : }
83 :
84 : int getWriteLength() {
85 : int length = 0;
86 4 : final MqttEncoding enc = new MqttEncoding();
87 12 : length += enc.getByteCount(clientIdentifier);
88 12 : if (this.variableHeader.connectFlags.willFlag) {
89 3 : length += enc.getByteCount(willTopic);
90 3 : length += enc.getByteCount(willMessage);
91 : }
92 12 : if (variableHeader.connectFlags.usernameFlag) {
93 0 : length += enc.getByteCount(username);
94 : }
95 12 : if (variableHeader.connectFlags.passwordFlag) {
96 0 : length += enc.getByteCount(password);
97 : }
98 : return length;
99 : }
100 : }
|