#include "SMSDevice.h" #include "ProtocolDefs.h" #include CSMSDevice::CSMSDevice(int Address, CAbstractNetworkCommIF *NetworkInterface, CVoipMsSMSClient *VoipMsIFPtr): CNetworkDevice(ID_SMS_CLIENT,Address,NetworkInterface) { mStatusRequestsCount = 0; mVoipMsInterfaceHandle = VoipMsIFPtr; mStatusRequestTimer = new QTimer; mStatusRequestTimer->setInterval(ETHERNET_NETWORK_STATUS_TIMEOUT); mStatusRequestTimer->setSingleShot(true); connect(mStatusRequestTimer,SIGNAL(timeout()),this,SLOT(StatusReqTimerExpired())); // mStatusRequestTimer->start(); } CSMSDevice::~CSMSDevice() { delete mStatusRequestTimer; } int CSMSDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray Data) { Q_UNUSED(DeviceID) // Q_UNUSED(DeviceAddress) // Q_UNUSED(MessageID) Q_UNUSED(DataSize) Q_UNUSED(Data) mStatusRequestTimer->stop(); if(DeviceAddress != GetDeviceAddress()) { return RET_ERROR; } switch(MessageID) { case SMS_CLIENT_DEVICE_ACK: { break; } case SMS_CLIENT_DEVICE_STATUS_RESPONSE: { break; } case SMS_CLIENT_DEVICE_DID_INFO_REQUEST: { QByteArray FrameData; QBuffer FrameBuffer(&FrameData); FrameBuffer.open(QIODevice::ReadWrite); QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer); // QDataStream *FrameDataStrm = new QDataStream(&FrameData,QIODevice::ReadWrite); QString DID = mVoipMsInterfaceHandle->GetDefaultDID(); *FrameDataStrm << DID; FrameBuffer.seek(0); mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_DID_INFO_RESPONSE,FrameData.size(),FrameData); delete FrameDataStrm; break; } case SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST: { QByteArray FrameData; QBuffer FrameBuffer(&FrameData); FrameBuffer.open(QIODevice::ReadWrite); QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer); QList *SMSList = mVoipMsInterfaceHandle->GetSMSList(); *FrameDataStrm << SMSList->size(); for(int i = 0; i < SMSList->size(); i++) { *FrameDataStrm << SMSList->at(i); } FrameBuffer.seek(0); mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,FrameData.size(),FrameData); break; } case SMS_CLIENT_DEVICE_STATUS_REQUEST: case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE: case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION: case SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE: default: { qDebug("SMSDevice Rx invalid MSG %d",MessageID); break; } } mIsOnline = true; mStatusRequestTimer->start(); mStatusRequestsCount = 0; return RET_OK; } void CSMSDevice::RequestStatus() { mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_STATUS_REQUEST,0,QByteArray()); } void CSMSDevice::StatusReqTimerExpired() { if(++mStatusRequestsCount > 3) { mIsOnline = false; qDebug("SMS Device offline,Address: %d",mDeviceAddress); } // RequestStatus(); mStatusRequestTimer->start(); }