org.eclipse.paho.client.mqttv3的包結構如下:
org.eclipse.paho.client.mqttv3
Interfaces
IMqttActionListener
IMqttAsyncClient
IMqttClient
IMqttDeliveryToken
MqttMessageListener
IMqttToken
MqttCallback
MqttCallbackExtended
MqttClientPersistence
MqttPersistable
MqttPingSender
Classes
BufferedMessage
DisconnectedBufferOptions
MqttAsyncClient
MqttClient
MqttConnectOptions
MqttDeliveryToken
MqttMessage
MqttToken
MqttTopic
TimerPingSender
Exceptions
MqttException
MqttPersistenceException
MqttSecurityException
org.eclipse.paho.client.mqttv3.internal
Interfaces
DestinationProvider
IDisconnectedBufferCallback
NetworkModule
Classes
ClientComms
ClientDefaults
ClientState
CommsCallback
CommsReceiver
CommsSender
CommsTokenStore
ConnectActionListener
DisconnectedMessageBuffer
ExceptionHelper
FileLock
LocalNetworkModule
MessageCatalog
MqttPersistentData
ResourceBundleCatalog
SSLNetworkModule
TCPNetworkModule
Token
org.eclipse.paho.client.mqttv3.internal.security
Classes
SimpleBase64Encoder
SSLSocketFactoryFactory
org.eclipse.paho.client.mqttv3.internal.websocket
Classes
Base64
WebSocketFrame
WebSocketHandshake
WebSocketNetworkModule
WebSocketReceiver
WebSocketSecureNetworkModule
Exceptions
HandshakeFailedException
org.eclipse.paho.client.mqttv3.internal.wire
Classes
CountingInputStream
MqttAck
MqttConnack
MqttConnect
MqttDisconnect
MqttInputStream
MqttOutputStream
MqttPersistableWireMessage
MqttPingReq
MqttPingResp
MqttPubAck
MqttPubComp
MqttPublish
MqttPubRec
MqttPubRel
MqttReceivedMessage
MqttSuback
MqttSubscribe
MqttUnsubAck
MqttUnsubscribe
MqttWireMessage
MultiByteArrayInputStream
MultiByteInteger
org.eclipse.paho.client.mqttv3.logging
Interfaces
Logger
Classes
JSR47Logger
LoggerFactory
SimpleLogFormatter
org.eclipse.paho.client.mqttv3.persist
Classes
MemoryPersistence
MqttDefaultFilePersistence
org.eclipse.paho.client.mqttv3.util
Classes
Debug
Strings
摘要翻譯如下:
==== Packages ========== org.eclipse.paho.client.mqttv3 ==================== [Interfaces] IMqttActionListener 當異步操作完成時,將會通知該接口的實現者。監聽器在MqttToken上注冊,令牌與連接或發布等操作相關聯。 當與MqttAsyncClient上的令牌一起使用時,偵聽器將在MQTT客戶端的線程上被回調。 如果操作成功或失敗,監聽器將被通知。 監聽器快速返回控制非常重要,否則MQTT客戶端的操作將會停止。 void onSuccess(IMqttToken asyncActionToken) void onFailure(IMqttToken asyncActionToken, java.lang.Throwable exception) IMqttAsyncClient implements IMqttAsyncClient 使應用程序能夠使用非阻塞方法與MQTT服務器進行通信。使用非阻塞客戶端允許應用程序使用阻塞和非阻塞樣式的混合。 IMqttClient 使用阻塞客戶端只允許應用程序使用一種樣式。 阻塞客戶端提供了與早期版本的MQTT客戶端的兼容性。 IMqttDeliveryToken extends IMqttToken IMqttToken的子類,跟蹤消息的傳遞。 與IMqttToken交付令牌的實例不同,可以在連接和客戶端重新啟動時使用。 這樣可以在發送失敗后跟蹤消息。 IMqttMessageListener 消息到達時會通知此接口的實現者。 IMqttToken 提供跟蹤異步任務完成的機制。 MqttCallback 當發生與客戶端相關的異步事件時,使應用程序得到通知。實現此接口的類可以在兩種類型的客戶端上注冊: IMqttClient.setCallback(MqttCallback)和IMqttAsyncClient.setCallback(MqttCallback) void connectionLost (java.lang.Throwable cause) 當與服務器的連接丟失時調用此方法。 void deliveryComplete ( IMqttDeliveryToken token) 在消息傳遞完成時調用,並且已收到所有確認。 void messageArrived (java.lang.String topic, MqttMessage message) 當消息從服務器到達時調用此方法。 MqttCallbackExtended extends MqttCallback 擴展MqttCallback以允許新的回調,而不會中斷現有應用程序的API。 實現此接口的類可以在兩種類型的客戶端上注冊: IMqttClient.setCallback(MqttCallback)和IMqttAsyncClient.setCallback(MqttCallback) void connectComplete (boolean reconnect, java.lang.String serverURI) 當與服務器的連接成功完成時調用。 繼承的方法 connectionLost , deliveryComplete , messageArrived MqttClientPersistence 表示一個持久性數據存儲,用於存儲出站和入站郵件,以便傳送到指定的QoS。 可使用MqttClient.MqttClient(String, String, MqttClientPersistence)指定該接口的實現, MqttClient將使用該MqttClient來保持QoS 1 和 2 消息。 如果定義的方法拋出MqttPersistenceException,那么數據持久化的狀態應保持為被調用方法之前的狀態。 例如,如果put(String, MqttPersistable)在任何時候拋出異常,那么數據將被假定為不在持久存儲中。 同樣,如果remove(String)拋出一個異常,那么數據將被認為仍然保存在持久性存儲中。 持久性接口由記錄在診斷持續性故障時可能需要的任何異常或錯誤信息。 MqttPersistable 表示一個對象,用於傳遞要在MqttClientPersistence接口上持久保存的數據。 當數據通過接口傳遞時,標題和有效載荷是分開的,以避免不必要的消息拷貝。 MqttPingSender 表示每個保持活動時間間隔用於向MQTT代理發送ping數據包的對象。 void init ( ClientComms comms) 初始方法。 void schedule (long delayInMilliseconds) 安排下一個ping在一定的延遲。 void start () 開始ping發送者。 void stop () 停止ping發件人。 ========= Classes ======== BufferedMessage 一個BufferedMessage包含一個MqttWire消息和令牌,它允許當客戶端處於靜止狀態時緩沖消息和令牌 DisconnectedBufferOptions 保存用於管理離線(或斷開)緩沖消息行為的選項集 MqttAsyncClient 輕量級客戶端,使用允許在后台運行操作的非阻塞方法與MQTT服務器交互。 默認情況下,使用MqttDefaultFilePersistence將消息存儲到文件中。 如果將持久性設置為null,則消息將存儲在內存中。 MqttClient implements IMqttClient 輕量級客戶端,使用阻塞操作完成的方法與MQTT服務器交互。 MqttConnectOptions 保存一組控制客戶端連接到服務器的選項。 static boolean CLEAN_SESSION_DEFAULT 如果沒有指定默認清理會話設置 static int CONNECTION_TIMEOUT_DEFAULT 如果沒有指定默認的連接超時時間(以秒為單位) static int KEEP_ALIVE_INTERVAL_DEFAULT 如果未指定,則以秒為單位的默認保持活動時間間隔 static int MAX_INFLIGHT_DEFAULT 如果沒有指定,則默認為最大航程 static int MQTT_VERSION_3_1 static int MQTT_VERSION_3_1_1 static int MQTT_VERSION_DEFAULT 首先默認的MqttVersion是3.1.1 ,如果失敗,則返回到3.1 MqttDeliveryToken extends MqttToken implements IMqttDeliveryToken 提供跟蹤消息傳遞進度的機制。用於以非阻塞方式(在后台運行)跟蹤消息的發送進度。 MqttMessage MQTT消息包含應用程序有效負載和選項,指定如何傳遞消息。消息包含表示為byte []的“payload”(消息體)。 MqttToken implements IMqttToken 提供跟蹤異步操作完成的機制。實現ImqttToken接口的令牌從所有非阻塞方法返回,發布除外。 MqttTopic 表示主題目標,用於發布/訂閱消息傳遞。 TimerPingSender implements MqttPingSender 默認ping發送者執行 這個類實現了IMqttPingSender pinger接口,允許應用程序在每個活動時間間隔IMqttPingSender服務器發送ping數據包。 ==== Exceptions ==== MqttExceptionn extends Exception MqttPersistenceException extends MqttException MqttSecurityException extends MqttException ========================= org.eclipse.paho.client.mqttv3.internal ========================= [ Interfaces ] DestinationProvider 這個接口可以作為MqttClient和MqttMIDPClient的一個通用類型,所以它們可以傳遞給ClientComms而不需要客戶端類需要知道另一個。 具體而言,這允許MIDP客戶端在沒有非MIDP MqttClient / MqttConnectOptions類的情況下工作。 MqttTopic getTopic (java.lang.String topic) IDisconnectedBufferCallback void publishBufferedMessage ( BufferedMessage bufferedMessage) NetworkModule java.io.InputStream getInputStream () java.io.OutputStream getOutputStream () java.lang.String getServerURI () void start () void stop () ======== Classes ======== ClientComms 處理與服務器的客戶端通信。 發送和接收MQTT V3消息。 ClientDefaults public static final int MAX_MSG_SIZE = 1024 * 1024 * 256; // 256 MB ClientState 客戶端的核心,它保存待處理和正在進行的消息的狀態信息。 已經被接受發送的消息在被遞送的同時在幾個對象之間移動。 1)當客戶端沒有運行時,消息被存儲在一個實現了MqttClientPersistent接口的持久性存儲中。 默認是MqttDefaultFilePersistence,它可以跨越故障和系統重新啟動安全地存儲消息。 如果沒有指定持久性,則返回到MemoryPersistence,這將在Mqtt客戶端實例化時維護消息。 2)當客戶端或特定的ClientState被實例化時,將消息從持久性存儲中讀取到: - outboundqos2哈希表,如果QoS 2 PUBLISH或PUBREL - outboundqos1哈希表,如果QoS 1 PUBLISH(參見restoreState) 3)On Connect,復制消息以messageid順序將出站哈希表添加到pendingMessages或pendingFlows向量中。 - 初始消息發布進入pendingmessages緩沖區。 - PUBREL進入待處理緩沖區(參見restoreInflightMessages) 4)發送程序線程從待處理流和待處理消息緩沖區中讀取消息。 該消息將從pendingbuffer中刪除,但保留在出站*哈希表。 哈希表是將全部未完成消息存儲在內存中的地方。 (持久性僅在啟動時使用) 5)接收器線程 - 接收有線消息: - 如果QoS 1則從持久性中移除,outboundqos1 - 如果QoS 2 PUBREC發送PUBREL。 使用PUBREL更新outboundqos2條目並更新持久性。 - 如果QoS 2 PUBCOMP從持久性和outboundqos2中移除注意:由於客戶端的多線程特性,對這個類的任何修改都考慮到並發性至關重要。 例如,只要流量/消息放在線路上,接收線程就可以接收確認並在發送方完成處理之前處理響應。 例如連接可能被發送,在連接通知發送之前收到的conack已經被處理! CommsCallback implements Runnable Receiver和外部API之間的橋梁。 此類由Receiver調用,然后將以通信為中心的MQTT消息對象轉換為由外部API理解的對象。 CommsReceiver implements Runnable 接收來自服務器的MQTT數據包。 CommsSender implements Runnable CommsTokenStore 提供基於“令牌”的系統來存儲和跟蹤跨多個線程的操作。發送消息時,令牌與消息相關聯,並使用saveToken(MqttToken, MqttWireMessage)方法保存。 任何對該狀態感興趣的,都可以調用令牌上的一個等待方法,或者在操作上使用異步監聽器回調方法。 另一個線程上的CommsReceiver類從網絡讀取響應。 它使用響應來查找相關令牌,然后可以通知它。 注:Ping,連接和斷開連接沒有唯一的消息ID,因為每種類型的只有一個未決的請求被允許未完成 ConnectActionListener implements IMqttActionListener 這個類處理AsyncClient到一個可用URL的連接。這些URL在創建客戶端時作為單例提供,或作為連接選項中的列表提供。 這個類使用自己的onSuccess和onFailure回調優先於用戶提供的回調。嘗試連接到列表中的每個URL,直到連接嘗試成功或嘗試了所有URL 如果連接成功,則會通知用戶令牌,並調用用戶onSuccess回調。 如果連接失敗,則嘗試列表中的另一個URL,否則將通知用戶令牌,並調用用戶onFailure回調 void connect () 開始連接處理 void onFailure ( IMqttToken token, java.lang.Throwable exception) 連接失敗,請嘗試列表中的下一個URI。 void onSuccess ( IMqttToken token) 如果連接成功,則調用用戶onSuccess回調 void setMqttCallbackExtended ( MqttCallbackExtended mqttCallbackExtended) 設置MqttCallbackExtened回調接收connectComplete回調 DisconnectedMessageBuffer implements Runnable ExceptionHelper 工具類可幫助創建正確類型的例外。 FileLock LocalNetworkModule implements NetworkModule 特殊的comms類,允許MQTT客戶機在與MQTT服務器運行在同一JRE實例中時,使用非TCP /優化機制與MQTT服務器交談。 這個類檢查是否存在優化的通信協議類,即提供優化的通信機制的類。 如果不可用,則使用優化機制進行連接的請求將被拒絕。 實現這一點的唯一已知的服務器是微型經紀人: - 一個與許多IBM產品一起提供的MQTT服務器。 public abstract class MessageCatalog private static MessageCatalog INSTANCE = null; 人類可讀的錯誤信息目錄。 MqttPersistentData implements MqttPersistable ResourceBundleCatalog extends MessageCatalog SSLNetworkModule extends TCPNetworkModule 用於通過SSL連接的網絡模塊。 TCPNetworkModule implements NetworkModule 一個通過TCP連接的網絡模塊。 Token ============================== org.eclipse.paho.client.mqttv3.internal.security ============================== [ Classes ] SimpleBase64Encoder private static final String PWDCHARS_STRING = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; private static final char[] PWDCHARS_ARRAY = PWDCHARS_STRING.toCharArray(); public static String encode(byte[] bytes) public static byte[] decode(String string) private final static String to64(long input, int size) private final static long from64(byte[] encoded, int idx, int size) SSLSocketFactoryFactory 一個SSLSocketFactoryFactory提供了一個套接字工廠和一個服務器套接字工廠,然后可以用來創建SSL客戶端套接字或SSL服務器套接字。 SSLSocketFactoryFactory使用IBM SSL屬性進行配置,即格式為“com.ibm.ssl.propertyName”的屬性,例如“com.ibm.ssl.keyStore”。 該類支持多種配置,每種配置都使用名稱或配置ID進行標識。 使用“null”的配置ID作為默認配置。 當為給定配置創建套接字工廠時,首先會選擇該配置的屬性。 如果在那里沒有定義屬性,那么在默認配置中查找該屬性。 最后,如果還沒有找到屬性元素,則檢查相應的系統屬性,即javax.net.ssl.keyStore。 如果系統屬性沒有設置,那么使用系統的默認值(如果可用)或引發異常。SSLSocketFacotryFactory可以在任何時候重新配置。 重新配置不會影響現有套接字工廠。 所有的屬性共享相同的密鑰空間; 即配置ID不是屬性鍵的一部分。應按以下順序調用方法: isSupportedOnJVM() :檢查此類是否在運行時平台上受支持。 並非所有運行時支持SSL / TLS。 SSLSocketFactoryFactory() :構造函數。 客戶端(在同一個JVM中)可能共享一個SSLSocketFactoryFactory,或者每個都有一個。 initialize(properties,configID) :用配置所需的SSL屬性初始化此對象。 這可能會被調用多次,每次需要配置一次。它可能會被再次調用來更改特定配置所需的SSL屬性。 getEnabledCipherSuites(configID) :稍后在套接字上設置啟用的密碼套件[見下文]。 對於MQTT服務器: getKeyStore(configID) :或者,要檢查是否沒有密鑰庫,那么所有啟用的密碼套件都是匿名的。 createServerSocketFactory(configID) :創建一個SSLServerSocketFactory。 getClientAuthentication(configID) :稍后在SSLServerSocket(自身從SSLServerSocketFactory創建)上設置是否需要客戶端身份驗證。 對於MQTT客戶端:createSocketFactory(configID) :創建一個SSLSocketFactory。 ================================ org.eclipse.paho.client.mqttv3.internal.websocket ================================ [ Classes ] Base64 private static final Base64 instance = new Base64(); private static final Base64Encoder encoder = instance.new Base64Encoder(); public static String encode (String s) public static String encodeBytes (byte[] b) public class Base64Encoder extends AbstractPreferences WebSocketFrame 公共類 WebSocketHandshake 公共類。Helper類執行WebSocket握手。 WebSocketNetworkModule extends TCPNetworkModule WebSocketReceiver implements Runnable WebSocketSecureNetworkModule extends SSLNetworkModule [ Exceptions ] HandshakeFailedException extends Exception { private static final long serialVersionUID = 1L; } ============================== org.eclipse.paho.client.mqttv3.internal.wire ============================== [ Classes ] CountingInputStream extends InputStream 計數從中讀取的字節的輸入流。 private InputStream in; private int counter; public CountingInputStream(InputStream in) public int read() throws IOException public int getCounter() { return counter; } public void resetCounter() { counter = 0; } MqttAck extends MqttWireMessage 所有確認消息的抽象超類。 public MqttAck(byte type) { super(type); } protected byte getMessageInfo() { return 0; } MqttConnack extends MqttAck MQTT CONNACK的在線表示。 public static final String KEY = "Con"; private int returnCode; private boolean sessionPresent; MqttConnect extends MqttWireMessage private String clientId; private boolean cleanSession; private MqttMessage willMessage; private String userName; private char[] password; private int keepAliveInterval; private String willDestination; private int MqttVersion; MqttDisconnect extends MqttWireMessage MqttInputStream extends InputStream 一個MqttInputStream讓應用程序讀取MqttWireMessage實例。 private static final String CLASS_NAME = MqttInputStream.class.getName(); private static final Logger log = LoggerFactory.getLogger(LoggerFactory.MQTT_CLIENT_MSG_CAT, CLASS_NAME); private ClientState clientState = null; private DataInputStream in; MqttOutputStream extends OutputStream 一個MqttOutputStream讓應用程序編寫MqttWireMessage實例。 private static final String CLASS_NAME = MqttOutputStream.class.getName(); private static final Logger log = LoggerFactory.getLogger(LoggerFactory.MQTT_CLIENT_MSG_CAT, CLASS_NAME); private ClientState clientState = null; private BufferedOutputStream out; MqttPersistableWireMessage extends MqttWireMessage implements MqttPersistable MqttPingReq extends MqttWireMessage MqttPingResp extends MqttAck MqttPubAck extends MqttAck MqttPubComp extends MqttAck MqttPublish extends MqttPersistableWireMessage MqttPubRec extends MqttAck MqttPubRel extends MqttPersistableWireMessage MqttReceivedMessage extends MqttMessage MqttSuback extends MqttAck MqttSubscribe extends MqttWireMessage MqttUnsubAck extends MqttAck MqttUnsubscribe extends MqttWireMessage public abstract class MqttWireMessage MultiByteArrayInputStream extends InputStream private byte[] bytesA; private int offsetA; private int lengthA; private byte[] bytesB; private int offsetB; private int lengthB; private int pos = 0; public MultiByteArrayInputStream(byte[] bytesA, int offsetA, int lengthA, byte[] bytesB, int offsetB, int lengthB){ } public int read() throws IOException{ } MultiByteInteger 表示由MQTT V3規范定義的多字節整數(MBI)。 private long value; private int length; public MultiByteInteger(long value) public MultiByteInteger(long value, int length) public int getEncodedLength() public long getValue() ======================== org.eclipse.paho.client.mqttv3.logging ======================== [ Interfaces ] Logger [ Classes ] JSR47Logger implements Logger 使用java.uti.logging的記錄器接口的實現使用Java內置日志記錄工具的記錄器 - java.util.logging。 提供了一個示例java.util.logging屬性文件 - jsr47min.properties,演示了如何使用基於內存的跟蹤工具運行,該工具以最低的性能開銷運行。 當記錄/跟蹤記錄被寫入與MemoryHandler觸發器級別匹配或在MemoryHandler上調用push方法時,可以轉儲內存緩沖區。 Debug提供的方法可以很容易地轉儲內存緩沖區以及其他有用的調試信息。 LoggerFactory 返回記錄器以供MQTT客戶端使用的工廠。 默認的日志和跟蹤工具使用Java在日志工具中的構建: - java.util.logging。 對於不可用的系統或需要替代日志框架的系統,可以使用setLogger(String)來替換日志工具,該日志工具需要實現Logger接口。 SimpleLogFormatter extends Formatter 以可讀形式打印單行日志記錄。 ======================== org.eclipse.paho.client.mqttv3.persist ======================== [ Classes ] MemoryPersistence implements MqttClientPersistence 使用內存的持久性在客戶端或設備不需要可靠性重新啟動內存的情況下,可以使用該內存持久性。 在需要可靠性的情況下,例如當clean session設置為false時,應使用非易失性形式的持久性。 MqttDefaultFilePersistence implements MqttClientPersistence 提供基於文件的持久性的MqttClientPersistence接口的實現。 當創建Persistence對象時指定一個目錄。 當持久性被打開時(見open(String, String) ),在這個客戶端ID和連接鍵的基礎下創建一個子目錄。 這允許一個持久性基目錄被多個客戶共享。 子目錄的名稱是通過將客戶端ID和連接鍵與'/','\\',':'或''的任何實例連接而創建的。 ====================== org.eclipse.paho.client.mqttv3.util ====================== [ Classes ] Debug 用於幫助調試Paho MQTT客戶端問題的實用程序一旦初始化對dumpClientDebug的調用,將強制將任何內存跟蹤與相關客戶端和系統狀態一起加載到主日志設施。 轉儲進行時,不會執行客戶端寬鎖。 這意味着客戶端狀態的集合可能不一致,因為客戶端在轉儲過程中仍可能正在處理工作。 Strings 字符串助手 ========= END ===========