/*
* Copyright 2014-2016 CyberVision, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kaaproject.kaa.common.channels.protocols.kaatcp.messages;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.Framer;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.MqttFramelistener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.ConnAckListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.ConnectListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.DisconnectListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.PingRequestListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.PingResponseListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.SyncRequestListener;
import org.kaaproject.kaa.common.channels.protocols.kaatcp.listeners.SyncResponseListener;
/**
* MessageFactory Class. Used to transform byte stream to specific protocol
* messages. Typical use:
* MessageFactory factory = new MessageFactory();
* factory.registerMessageListener(listener);
* factory.getFramer().pushBytes(bytes);
* Where listener instance of class which implements one of protocol message
* listeners. and bytes - byte[] stream received from TCP/IP.
*
* @author Andrey Panasenko
*/
public class MessageFactory implements MqttFramelistener {
private Framer framer;
private ConnAckListener connAckListener;
private ConnectListener connectListener;
private DisconnectListener disconnectListener;
private PingRequestListener pingRequestListener;
private PingResponseListener pingResponseListener;
private SyncRequestListener syncRequestListener;
private SyncResponseListener syncResponseListener;
/**
* Constructor with externally created Framer.
*
* @param framer Framer
*/
public MessageFactory(Framer framer) {
this.setFramer(framer);
framer.registerFrameListener(this);
}
/**
* Default Constructor.
*/
public MessageFactory() {
this.setFramer(new Framer());
framer.registerFrameListener(this);
}
/*
* (non-Javadoc)
*
* @see
* org.kaaproject.kaa.common.channels.protocols.kaatcp.MqttFramelistener
* #onMqttFrame
* (org.kaaproject.kaa.common.channels.protocols.kaatcp.messages.mqttFrame)
*/
@Override
public void onMqttFrame(MqttFrame frame) {
switch (frame.getMessageType()) {
case CONNACK:
if (connAckListener != null) {
connAckListener.onMessage((ConnAck) frame);
}
break;
case CONNECT:
if (connectListener != null) {
connectListener.onMessage((Connect) frame);
}
break;
case DISCONNECT:
if (disconnectListener != null) {
disconnectListener.onMessage((Disconnect) frame);
}
break;
case KAASYNC:
onKaaSyncMessage((KaaSync) frame);
break;
case PINGREQ:
if (pingRequestListener != null) {
pingRequestListener.onMessage((PingRequest) frame);
}
break;
case PINGRESP:
if (pingResponseListener != null) {
pingResponseListener.onMessage((PingResponse) frame);
}
break;
default:
break;
}
}
/**
* Private message processor in case of Mqtt frame is KaaSync Message Type.
*
* @param frame KaaSync object
*/
private void onKaaSyncMessage(KaaSync frame) {
KaaSyncMessageType type = frame.getKaaSyncMessageType();
switch (type) {
case SYNC:
if (frame.isRequest()) {
if (syncRequestListener != null) {
syncRequestListener.onMessage((SyncRequest) frame);
}
} else {
if (syncResponseListener != null) {
syncResponseListener.onMessage((SyncResponse) frame);
}
}
break;
case UNUSED:
break;
default:
break;
}
}
/**
* Register ConnAck message listener.
*
* @param listener ConnAckListener
*/
public void registerMessageListener(ConnAckListener listener) {
connAckListener = listener;
}
/**
* Register Connect message listener.
*
* @param listener ConnectListener
*/
public void registerMessageListener(ConnectListener listener) {
connectListener = listener;
}
/**
* Register Disconnect message listener.
*
* @param listener DisconnectListener
*/
public void registerMessageListener(DisconnectListener listener) {
disconnectListener = listener;
}
/**
* Register PingRequest message listener.
*
* @param listener PingRequestListener
*/
public void registerMessageListener(PingRequestListener listener) {
pingRequestListener = listener;
}
/**
* Register PingResponse message listener.
*
* @param listener PingResponseListener
*/
public void registerMessageListener(PingResponseListener listener) {
pingResponseListener = listener;
}
/**
* Register SyncRequest message listener.
*
* @param syncRequestListener SyncRequestListener
*/
public void registerMessageListener(SyncRequestListener syncRequestListener) {
this.syncRequestListener = syncRequestListener;
}
/**
* Register SyncResponse message listener.
*
* @param syncResponseListener SyncResponseListener
*/
public void registerMessageListener(SyncResponseListener syncResponseListener) {
this.syncResponseListener = syncResponseListener;
}
/**
* Framer getter.
*
* @return Framer
*/
public Framer getFramer() {
return framer;
}
/**
* Framer setter.
*
* @param framer Framer
*/
public void setFramer(Framer framer) {
this.framer = framer;
}
}