element包
element根目录下,定义了网络层通信的基本类。
根目录
CorrelationContext接口
一个提供上下文信息的接口,用于在发送和接收报文时存储特定的信息。该接口声明了get(String key)
方法,返回String值。
MapBasedCorrelationContext类
该类实现了CorrelationContext接口,内部通过一个HashMap实现信息的存储。
DtlsCorrelationContext类
该类继承自MapBasedCorrelationContext类,该类包含着DTLS的特定信息。从构造方法可以看出,创建该类时就需要指定DTLS的相关信息:
public DtlsCorrelationContext(String sessionId, String epoch, String cipher) {
// 非空检查
...
// 将三个形参传入内部HashMap中
put(KEY_SESSION_ID, sessionId);
put(KEY_EPOCH, epoch);
put(KEY_CIPHER, cipher);
}
MessageCallback接口
当建立DTLS会话时,该接口的唯一方法onContextEstablished(CorrelationContext context)
将会被回调。
RawData类
该类为一个简单的POJO类,包含着几个成员变量和对应的set/get方法,当Connector
发送和接收消息时,使用的是该类。其成员变量如下:
// 真正要传输的CoAP报文
public final byte[] bytes;
// socket地址
private InetSocketAddress address;
// 是否使用广播形式
private boolean multicast;
// 加密鉴权方式
private Principal senderIdentity;
// 传输时的上下文信息
private CorrelationContext correlationContext;
// 消息回调对象
private MessageCallback callback;
RawDataChannel接口
该接口表示一个接收来自网络层消息的处理器。需要预先调用Connector.setRawDataReceiver(RawDataChannel channel)
设置对应处理器,当从网络层接收到消息时,框架调用RawDataChannel.receiveData(RawData raw)
方法处理接收到的数据。该接口对receiveData()
方法做了要求,要求处理器调用该方法后需要快速的返回,否则将会影响接收消息的吞吐量,其建议是单独使用线程池处理消息。
Connector接口
该接口用于发送数据和接收数据,主要需要实现下面两个方法:
send(RawData msg);
setRawDataReceiver(RawDataChannel messageHandler);
当发送数据时,调用send方法,同时要求send方法不会阻塞主线程。当接收数据时,使用setRawDataReceiver方法设置的RawDataChannel对象来处理数据。
ConnectorBase类
该类实现了Connector接口,内部包含了一个发送线程、一个接收线程、一个阻塞队列和一个消息处理器。
当调用send方法时,将要发送的消息放入队列中,由发送线程从队列循环取出消息执行sendNext()
抽象方法,即生产者和消费者隔离。
接收线程循环执行receiveNext()
抽象方法从网络中接收数据,当获取到数据回调消息处理器的receiveData()
方法。
UDPConnector类
该类直接实现了Connector接口,没有继承ConnectorBase类,但原理还是一样的,使用发送线程发送UDP报文,使用接收线程接收UDP报文。
ConnectorFactory接口
该接口使用了抽象工厂的设计模式,代码如下:
public interface ConnectorFactory {
// 根据socket地址返回Connector对象
Connector newConnector(InetSocketAddress socketAddress);
}
实现类需要根据socket地址返回不加密的UDPConnector,或者返回加密的DTSConnector对象。本框架不涉及加密传输,所以没有实现该接口。
系列文章
Californium开源框架之源码分析(一)—— 整体认识
Californium开源框架之源码分析(二)—— coap包
Californium开源框架之源码分析(三)—— observe包
Californium开源框架之源码分析(四)—— server包
Californium开源框架之源码分析(五)—— network包(上)
Californium开源框架之源码分析(六)—— network包(下)
Californium开源框架之源码分析(七)—— core包
Californium开源框架之源码分析(八)—— element包 <– 当前位置