This commit is contained in:
J-F Martel 2016-01-24 10:25:54 -05:00
parent f4fc549a8a
commit 8f5a0f68ff
11 changed files with 246 additions and 9 deletions

View File

@ -55,6 +55,8 @@ void CMasterCtrl::Start()
mNetworkDevicesManager->mProgramHandle = this;
mEthernetNetworkServer->mDevicesMgrHandle = mNetworkDevicesManager;
mEthernetNetworkServer->mProgramHandle = this;
mVoipMsSMSClient->mProgramHandle = this;
connect(mVoipMsSMSClient,SIGNAL(DIDSFetched(QStringList)),mSettingsWindow,SLOT(DIDsListFetched(QStringList)));
mAVReceiverDevice->ConnectToReceiver();
@ -106,3 +108,9 @@ unsigned int CMasterCtrl::SettingsWindowClosed()
mVoipMsSMSClient->DownloadSMSFromServer();
return RET_OK;
}
int CMasterCtrl::NewSMSMessagesArrived(QList<CSMSMessage> NewMessages)
{
mNetworkDevicesManager->NewSMSMessagesReceived(NewMessages);
return RET_OK;
}

View File

@ -40,6 +40,8 @@ public:
unsigned int SettingsWindowClosed();
int NewSMSMessagesArrived(QList<CSMSMessage> NewMessages);
//Modules requests...

View File

@ -84,3 +84,15 @@ CNetworkDevice* CNetworkDevicesMgr::GetDevice(int DeviceID, int Address)
return 0;
}
int CNetworkDevicesMgr::NewSMSMessagesReceived(QList<CSMSMessage> NewMessages)
{
for(int i = 0; i < mNetworkDevicesList.size(); i++)
{
if(mNetworkDevicesList.at(i)->GetDeviceID() == ID_SMS_CLIENT)
{
CSMSDevice *SMSDevice = (CSMSDevice*)mNetworkDevicesList.at(i);
SMSDevice->SendNewSMSReceived(NewMessages);
}
}
}

View File

@ -28,6 +28,8 @@ public:
CVoipMsSMSClient *mVoipMSInterfaceHandle;
CMasterCtrl *mProgramHandle;
int NewSMSMessagesReceived(QList<CSMSMessage> NewMessages);
private:
QList<CNetworkDevice*> mNetworkDevicesList;

View File

@ -122,13 +122,15 @@ enum IR_REMOTE_CMDS
enum SMS_CLIENT_CMDS
{
SMS_CLIENT_DEVICE_ACK = 1,
SMS_CLIENT_DEVICE_STATUS_REQUEST,
SMS_CLIENT_DEVICE_STATUS_REQUEST, //2
SMS_CLIENT_DEVICE_STATUS_RESPONSE,
SMS_CLIENT_DEVICE_DID_INFO_REQUEST,
SMS_CLIENT_DEVICE_DID_INFO_REQUEST, //4
SMS_CLIENT_DEVICE_DID_INFO_RESPONSE,
SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,
SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST, //6
SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,
SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION,
SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION, //8
SMS_CLIENT_DEVICE_SEND_SMS_REQUEST,
SMS_CLIENT_DEVICE_SEND_SMS_ACK, //10
SMS_CLIENT_DEVICE_MAX_MSG

View File

@ -80,8 +80,40 @@ int CSMSDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int Mess
FrameBuffer.seek(0);
mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,FrameData.size(),FrameData);
FrameBuffer.close();
delete FrameDataStrm;
break;
}
case SMS_CLIENT_DEVICE_SEND_SMS_REQUEST:
{
// QBuffer FrameBuffer(&Data);
// FrameBuffer.open(QIODevice::ReadWrite);
QDataStream *FrameDataStrm = new QDataStream(Data);
qint32 NbMsgs;
*FrameDataStrm >> NbMsgs;
if(NbMsgs > 0)
{
QList<CSMSMessage> SMSList;
for(int i = 0; i < NbMsgs; i++)
{
CSMSMessage NewMessage;
*FrameDataStrm >> NewMessage;
SMSList.append(NewMessage);
}
mVoipMsInterfaceHandle->SendSMS(&SMSList);
}
// FrameBuffer.close();
delete FrameDataStrm;
break;
}
case SMS_CLIENT_DEVICE_STATUS_REQUEST:
case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE:
case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION:
@ -104,6 +136,48 @@ void CSMSDevice::RequestStatus()
mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_STATUS_REQUEST,0,QByteArray());
}
void CSMSDevice::SendSMSSentAck(bool Ack)
{
QByteArray FrameData;
QBuffer FrameBuffer(&FrameData);
FrameBuffer.open(QIODevice::ReadWrite);
QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer);
qint32 ACKData = 0;
if(Ack)
{
ACKData = 1;
}
*FrameDataStrm << ACKData;
mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_SEND_SMS_ACK,FrameData.size(),FrameData);
FrameBuffer.close();
delete FrameDataStrm;
}
void CSMSDevice::SendNewSMSReceived(QList<CSMSMessage> NewMessages)
{
QByteArray FrameData;
QBuffer FrameBuffer(&FrameData);
FrameBuffer.open(QIODevice::ReadWrite);
QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer);
// QList<CSMSMessage> *SMSList = mVoipMsInterfaceHandle->GetSMSList();
*FrameDataStrm << NewMessages.size();
for(int i = 0; i < NewMessages.size(); i++)
{
*FrameDataStrm << NewMessages.at(i);
}
FrameBuffer.seek(0);
mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION,FrameData.size(),FrameData);
FrameBuffer.close();
delete FrameDataStrm;
}
void CSMSDevice::StatusReqTimerExpired()
{
if(++mStatusRequestsCount > 3)

View File

@ -21,8 +21,11 @@ public:
QTimer *mStatusRequestTimer;
int mStatusRequestsCount;
void SendNewSMSReceived(QList<CSMSMessage> NewMessages);
private:
void RequestStatus();
void SendSMSSentAck(bool Ack);
public slots:
void StatusReqTimerExpired();

View File

@ -5,7 +5,12 @@
CSMSMessage::CSMSMessage()
{
this->mContact = "INVALID";
this->mDateTime = QDateTime::currentDateTime();
this->mDID = "INVALID";
this->mMessageText = "INVALID";
this->mType = SMS_INVALID_TYPE;
this->mVOIPMSDatabaseID = "INVALID";
}
QDataStream &operator<<(QDataStream &out, const CSMSMessage &source)

View File

@ -8,7 +8,8 @@
typedef enum eSMSType
{
SMS_SENT_TYPE,
SMS_RECEIVED_TYPE
SMS_RECEIVED_TYPE,
SMS_INVALID_TYPE
}SmsType_t;
class CSMSMessage

View File

@ -5,6 +5,7 @@
#include <QJsonObject>
#include <QDateTime>
#include <QStringList>
#include "MasterCtrl.h"
CVoipMsSMSClient::CVoipMsSMSClient()
{
@ -21,6 +22,8 @@ CVoipMsSMSClient::CVoipMsSMSClient()
mFirstDownloadDone = false;
mProgramHandle = 0;
}
CVoipMsSMSClient::~CVoipMsSMSClient()
@ -60,6 +63,8 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate)
// Url = "https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2015-11-01&to=2015-11-11&did=5143606463&limit=50";
StopSMSCheckTimer();
UrlStream << VOIP_MS_API_URL
<< "api_username=" << mVOIPMsSettings.mUsername << "&"
<< "api_password=" << mVOIPMsSettings.mPassword << "&"
@ -70,9 +75,55 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate)
<< "limit=" << VOIP_MS_SMS_MAX_COUNT;
// qDebug() << "Cmd: " << Url;
mVOIPMSSocket->get(QNetworkRequest(Url));
mCurStartDate = EndDate;
mLastRequestCmd = "getSMS";
return RET_OK;
}
int CVoipMsSMSClient::SendSMS(QList<CSMSMessage> *SMSList)
{
if(SMSList->size() == 0)
{
return RET_ERROR;
}
SendSMS(SMSList->at(0));
if(SMSList->size() > 1)
{
for(int i = 1; i < SMSList->size(); i++)
{
mPendingSMSSendList.append(SMSList->at(i));
}
}
return RET_OK;
}
int CVoipMsSMSClient::SendSMS(CSMSMessage Message)
{
QString Url;
Url.clear();
QTextStream UrlStream(&Url);
StopSMSCheckTimer();
UrlStream << VOIP_MS_API_URL
<< "api_username=" << mVOIPMsSettings.mUsername << "&"
<< "api_password=" << mVOIPMsSettings.mPassword << "&"
<< "method=" << "sendSMS" << "&"
<< "did=" << Message.mDID << "&"
<< "dst=" << Message.mContact << "&"
<< "message=" << Message.mMessageText;
qDebug() << "Sending SMS Msg : " << Url;
mVOIPMSSocket->get(QNetworkRequest(Url));
mLastRequestCmd = "sendSMS";
return RET_OK;
}
@ -90,6 +141,7 @@ int CVoipMsSMSClient::CheckForNewSMS()
return RET_ERROR;
}
QDate Today = QDate::currentDate();
QDate StartDate = mSMSMessagesList.at(0).mDateTime.date();
SendSMSDownloadRequest(StartDate,Today);
@ -103,12 +155,15 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con
Url.clear();
QTextStream UrlStream(&Url);
StopSMSCheckTimer();
UrlStream << VOIP_MS_API_URL
<< "api_username=" << username << "&"
<< "api_password=" << Password << "&"
<< "method=" << Method << "&";
mVOIPMSSocket->get(QNetworkRequest(Url));
mLastRequestCmd = Method;
return RET_OK;
}
@ -116,22 +171,29 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con
void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply)
{
QByteArray Reply = NetworkReply->readAll();
NetworkReply->deleteLater();
QJsonDocument JsonReply = QJsonDocument::fromJson(Reply);
QJsonObject JsonObject = JsonReply.object();
QStringList Keys = JsonObject.keys();
if(JsonObject["status"].toString() == "success")
{
if(Keys.contains("sms"))
if(mLastRequestCmd == "getSMS")
// if(Keys.contains("sms"))
{
QJsonArray SMSArray = JsonObject["sms"].toArray();
SMSReceived(&SMSArray);
}
else if(Keys.contains("dids"))
else if(mLastRequestCmd == "getDIDsInfo")
// else if(Keys.contains("dids"))
{
QJsonArray DIDsInfoArray = JsonObject["dids"].toArray();
DIDsInfoReceived(&DIDsInfoArray);
}
else if(mLastRequestCmd == "sendSMS")
{
SendSMSAckReceived(true);
}
}
else
{
@ -140,7 +202,40 @@ void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply)
{
SMSReceived(0);
}
if(mLastRequestCmd == "sendSMS")
{
SendSMSAckReceived(false);
}
}
Reply.clear();
}
int CVoipMsSMSClient::SendSMSAckReceived(bool Success)
{
if(Success)
{
qDebug("SMS sent successfuly");
if(mPendingSMSSendList.size() != 0)
{
CSMSMessage Msg = mPendingSMSSendList.takeFirst();
SendSMS(Msg);
}
else
{
CheckForNewSMS();
// StartSMSCheckTimer();
}
}
else
{
qDebug("SMS send failed");
mPendingSMSSendList.clear();
StartSMSCheckTimer();
}
return RET_OK;
}
unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
@ -200,6 +295,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
}
if(mFirstDownloadDone == true && NewMessages.size() > 0)
{
mProgramHandle->NewSMSMessagesArrived(NewMessages);
qDebug() << "Added " << NewMessages.size() << " new SMS messages";
qDebug("-----------------------------------------------------------------------");
qDebug(" ");
@ -240,6 +337,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
mSMSMessagesList.append(NewMessages);
if(mFirstDownloadDone == true && NewMessages.size() > 0)
{
mProgramHandle->NewSMSMessagesArrived(NewMessages);
qDebug() << "Added " << NewMessages.size() << " new SMS messages";
qDebug("-----------------------------------------------------------------------");
qDebug(" ");
@ -283,7 +382,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
mFirstDownloadDone = true;
mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT);
// mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT);
StartSMSCheckTimer();
qDebug("Timer started");
}
@ -327,6 +427,8 @@ unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr)
emit DIDSFetched(DIDs);
}
StartSMSCheckTimer();
return RET_OK;
}
@ -398,6 +500,18 @@ QString CVoipMsSMSClient::GetDefaultDID()
return mVOIPMsSettings.mDefaultDID;
}
void CVoipMsSMSClient::StartSMSCheckTimer()
{
if(mFirstDownloadDone == true)
{
mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT);
}
}
void CVoipMsSMSClient::StopSMSCheckTimer()
{
mCheckNewSMSTimer->stop();
}
//https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getBalance&advanced=True

View File

@ -26,6 +26,8 @@ enum VoipMSRetValues
VOIPMS_RET_NO_DID_FOUND
};
class CMasterCtrl;
class CVoipMsSMSClient : public QObject
{
Q_OBJECT
@ -40,6 +42,8 @@ public:
QList<CSMSMessage> mSMSMessagesList;
CMasterCtrl *mProgramHandle;
unsigned int GetDidFromUserAccount(const QString username, const QString Password);
unsigned int SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData);
unsigned int NewSMSNotification(QString DID);
@ -50,12 +54,20 @@ public:
int GetSMSCount();
QString GetDefaultDID();
int SendSMS(QList<CSMSMessage> *SMSList);
int SendSMS(CSMSMessage Message);
private:
QNetworkAccessManager *mVOIPMSSocket;
unsigned int SMSReceived(QJsonArray *sms);
unsigned int DIDsInfoReceived(QJsonArray *DIDsInfo);
int SendSMSAckReceived(bool Success);
void StartSMSCheckTimer();
void StopSMSCheckTimer();
CVoipMSSMSSettings mVOIPMsSettings;
@ -66,6 +78,8 @@ private:
QTimer *mCheckNewSMSTimer;
bool mFirstDownloadDone;
QString mLastRequestCmd;
QList<CSMSMessage> mPendingSMSSendList;