#include "transport_manager/common.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_listener_empty.h"
+#ifdef TIME_TESTER
#include "time_metric_observer.h"
+#endif // TIME_TESTER
/**
*\namespace NsProtocolHandler
*/
void SendFramesNumber(int32_t connection_key, int32_t number_of_frames);
+#ifdef TIME_TESTER
/**
* @brief Setup observer for time metric.
*
* @param observer - pointer to observer
*/
void SetTimeMetricObserver(PHMetricObserver* observer);
+#endif // TIME_TESTER
+
/*
* Prepare and send heartbeat message to mobile
*/
void SendHeartBeat(int32_t connection_id, uint8_t session_id);
+ /**
+ * \brief Sends ending session to mobile application
+ * \param connection_id Identifier of connection within which
+ * session exists
+ * \param session_id ID of session to be ended
+ */
+ void SendEndSession(int32_t connection_id, uint8_t session_id);
+
protected:
/**
*\brief (JSON Handler)
*/
ProtocolObservers protocol_observers_;
+#ifdef TIME_TESTER
PHMetricObserver* metric_observer_;
+#endif // TIME_TESTER
+
/**
*\brief Pointer on instance of class implementing ISessionObserver
*\brief (Connection Handler)
raw_ford_messages_from_mobile_("MessagesFromMobileAppHandler", this,
threads::ThreadOptions(kStackSize)),
raw_ford_messages_to_mobile_("MessagesToMobileAppHandler", this,
- threads::ThreadOptions(kStackSize)),
- metric_observer_(NULL) {
+ threads::ThreadOptions(kStackSize))
+#ifdef TIME_TESTER
+ , metric_observer_(NULL)
+#endif // TIME_TESTER
+
+{
LOG4CXX_TRACE_ENTER(logger_);
LOG4CXX_TRACE_EXIT(logger_);
}
void ProtocolHandlerImpl::set_session_observer(SessionObserver* observer) {
- if (!observer) {
- LOG4CXX_ERROR(logger_, "Invalid (NULL) pointer to ISessionObserver.");
- return;
- }
-
session_observer_ = observer;
}
uint8_t service_type) {
LOG4CXX_TRACE_ENTER(logger_);
+ uint8_t protocolVersion;
+
+ if (0 == profile::Profile::instance()->heart_beat_timeout()) {
+ protocolVersion = PROTOCOL_VERSION_2;
+ LOG4CXX_INFO(logger_, "Heart beat timeout == 0 => SET PROTOCOL_VERSION_2");
+ } else {
+ protocolVersion = PROTOCOL_VERSION_3;
+ LOG4CXX_INFO(logger_, "Heart beat timeout != 0 => SET PROTOCOL_VERSION_3");
+ }
+
ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(connection_id,
- PROTOCOL_VERSION_3, COMPRESS_OFF, FRAME_TYPE_CONTROL,
- service_type, FRAME_DATA_START_SERVICE_ACK, session_id,
- 0, hash_code));
+ protocolVersion, COMPRESS_OFF, FRAME_TYPE_CONTROL,
+ service_type, FRAME_DATA_START_SERVICE_ACK, session_id,
+ 0, hash_code));
raw_ford_messages_to_mobile_.PostMessage(
impl::RawFordMessageToMobile(ptr, false));
LOG4CXX_TRACE_EXIT(logger_);
}
+void ProtocolHandlerImpl::SendEndSession(int32_t connection_id,
+ uint8_t session_id) {
+ LOG4CXX_TRACE_ENTER(logger_);
+
+ ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(connection_id,
+ PROTOCOL_VERSION_3, COMPRESS_OFF, FRAME_TYPE_CONTROL,
+ SERVICE_TYPE_RPC, FRAME_DATA_END_SERVICE, session_id, 0,
+ session_observer_->KeyFromPair(connection_id, session_id)));
+
+ raw_ford_messages_to_mobile_.PostMessage(
+ impl::RawFordMessageToMobile(ptr, false));
+
+ LOG4CXX_INFO(logger_, "SendEndSession() for connection " << connection_id
+ << " for service_type " << static_cast<int32_t>(SERVICE_TYPE_RPC)
+ << " session_id " << static_cast<int32_t>(session_id));
+
+ LOG4CXX_TRACE_EXIT(logger_);
+}
+
RESULT_CODE ProtocolHandlerImpl::SendHeartBeatAck(ConnectionID connection_id,
uint8_t session_id,
uint32_t message_id) {
}
void ProtocolHandlerImpl::SendHeartBeat(int32_t connection_id,
- uint8_t session_id) {
+ uint8_t session_id) {
LOG4CXX_TRACE_ENTER(logger_);
ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(connection_id,
protocol_frames.begin();
it != protocol_frames.end(); ++it) {
impl::RawFordMessageFromMobile msg(*it);
+#ifdef TIME_TESTER
if (metric_observer_) {
metric_observer_->StartMessageProcess(msg->message_id());
}
+#endif // TIME_TESTER
+
raw_ford_messages_from_mobile_.PostMessage(msg);
}
LOG4CXX_TRACE_EXIT(logger_);
RawMessagePtr raw_message(
new RawMessage(connection_key, packet->protocol_version(), packet->data(),
packet->data_size(), packet->service_type()));
+#ifdef TIME_TESTER
if (metric_observer_) {
PHMetricObserver::MessageMetric* metric = new PHMetricObserver::MessageMetric();
metric->message_id = packet->message_id();
metric->raw_msg = raw_message;
metric_observer_->EndMessageProcess(metric);
}
+#endif
NotifySubscribers(raw_message);
break;
}
RawMessagePtr rawMessage (new RawMessage(
key, completePacket->protocol_version(), completePacket->data(),
completePacket->total_data_bytes(), completePacket->service_type()));
+#ifdef TIME_TESTER
if (metric_observer_) {
PHMetricObserver::MessageMetric* metric = new PHMetricObserver::MessageMetric();
metric->raw_msg = rawMessage;
metric_observer_->EndMessageProcess(metric);
}
+#endif // TIME_TESTER
NotifySubscribers(rawMessage);
incomplete_multi_frame_messages_.erase(it);
static_cast<int>(packet.protocol_version()));
int32_t session_id = session_observer_->OnSessionStartedCallback(
- connection_id, packet.session_id(), packet.protocol_version(),
+ connection_id, packet.session_id(),
ServiceTypeFromByte(packet.service_type()));
if (-1 != session_id) {
impl::RawFordMessageToMobile(ptr, false));
}
+#ifdef TIME_TESTER
void ProtocolHandlerImpl::SetTimeMetricObserver(PHMetricObserver* observer) {
metric_observer_ = observer;
}
+#endif // TIME_TESTER
+
std::string ConvertPacketDataToString(const uint8_t* data,
const std::size_t data_size) {