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; mNetworkDevicesManager->mProgramHandle = this;
mEthernetNetworkServer->mDevicesMgrHandle = mNetworkDevicesManager; mEthernetNetworkServer->mDevicesMgrHandle = mNetworkDevicesManager;
mEthernetNetworkServer->mProgramHandle = this; mEthernetNetworkServer->mProgramHandle = this;
mVoipMsSMSClient->mProgramHandle = this;
connect(mVoipMsSMSClient,SIGNAL(DIDSFetched(QStringList)),mSettingsWindow,SLOT(DIDsListFetched(QStringList))); connect(mVoipMsSMSClient,SIGNAL(DIDSFetched(QStringList)),mSettingsWindow,SLOT(DIDsListFetched(QStringList)));
mAVReceiverDevice->ConnectToReceiver(); mAVReceiverDevice->ConnectToReceiver();
@ -106,3 +108,9 @@ unsigned int CMasterCtrl::SettingsWindowClosed()
mVoipMsSMSClient->DownloadSMSFromServer(); mVoipMsSMSClient->DownloadSMSFromServer();
return RET_OK; 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(); unsigned int SettingsWindowClosed();
int NewSMSMessagesArrived(QList<CSMSMessage> NewMessages);
//Modules requests... //Modules requests...

View File

@ -84,3 +84,15 @@ CNetworkDevice* CNetworkDevicesMgr::GetDevice(int DeviceID, int Address)
return 0; 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; CVoipMsSMSClient *mVoipMSInterfaceHandle;
CMasterCtrl *mProgramHandle; CMasterCtrl *mProgramHandle;
int NewSMSMessagesReceived(QList<CSMSMessage> NewMessages);
private: private:
QList<CNetworkDevice*> mNetworkDevicesList; QList<CNetworkDevice*> mNetworkDevicesList;

View File

@ -122,13 +122,15 @@ enum IR_REMOTE_CMDS
enum SMS_CLIENT_CMDS enum SMS_CLIENT_CMDS
{ {
SMS_CLIENT_DEVICE_ACK = 1, SMS_CLIENT_DEVICE_ACK = 1,
SMS_CLIENT_DEVICE_STATUS_REQUEST, SMS_CLIENT_DEVICE_STATUS_REQUEST, //2
SMS_CLIENT_DEVICE_STATUS_RESPONSE, 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_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_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 SMS_CLIENT_DEVICE_MAX_MSG

View File

@ -80,8 +80,40 @@ int CSMSDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int Mess
FrameBuffer.seek(0); FrameBuffer.seek(0);
mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,FrameData.size(),FrameData); mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,FrameData.size(),FrameData);
FrameBuffer.close();
delete FrameDataStrm;
break; 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_STATUS_REQUEST:
case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE: case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE:
case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION: 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()); 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() void CSMSDevice::StatusReqTimerExpired()
{ {
if(++mStatusRequestsCount > 3) if(++mStatusRequestsCount > 3)

View File

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

View File

@ -5,7 +5,12 @@
CSMSMessage::CSMSMessage() 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) QDataStream &operator<<(QDataStream &out, const CSMSMessage &source)

View File

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

View File

@ -5,6 +5,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QDateTime> #include <QDateTime>
#include <QStringList> #include <QStringList>
#include "MasterCtrl.h"
CVoipMsSMSClient::CVoipMsSMSClient() CVoipMsSMSClient::CVoipMsSMSClient()
{ {
@ -21,6 +22,8 @@ CVoipMsSMSClient::CVoipMsSMSClient()
mFirstDownloadDone = false; mFirstDownloadDone = false;
mProgramHandle = 0;
} }
CVoipMsSMSClient::~CVoipMsSMSClient() 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"; // 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 UrlStream << VOIP_MS_API_URL
<< "api_username=" << mVOIPMsSettings.mUsername << "&" << "api_username=" << mVOIPMsSettings.mUsername << "&"
<< "api_password=" << mVOIPMsSettings.mPassword << "&" << "api_password=" << mVOIPMsSettings.mPassword << "&"
@ -70,9 +75,55 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate)
<< "limit=" << VOIP_MS_SMS_MAX_COUNT; << "limit=" << VOIP_MS_SMS_MAX_COUNT;
// qDebug() << "Cmd: " << Url; // qDebug() << "Cmd: " << Url;
mVOIPMSSocket->get(QNetworkRequest(Url)); mVOIPMSSocket->get(QNetworkRequest(Url));
mCurStartDate = EndDate; 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; return RET_OK;
} }
@ -90,6 +141,7 @@ int CVoipMsSMSClient::CheckForNewSMS()
return RET_ERROR; return RET_ERROR;
} }
QDate Today = QDate::currentDate(); QDate Today = QDate::currentDate();
QDate StartDate = mSMSMessagesList.at(0).mDateTime.date(); QDate StartDate = mSMSMessagesList.at(0).mDateTime.date();
SendSMSDownloadRequest(StartDate,Today); SendSMSDownloadRequest(StartDate,Today);
@ -103,12 +155,15 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con
Url.clear(); Url.clear();
QTextStream UrlStream(&Url); QTextStream UrlStream(&Url);
StopSMSCheckTimer();
UrlStream << VOIP_MS_API_URL UrlStream << VOIP_MS_API_URL
<< "api_username=" << username << "&" << "api_username=" << username << "&"
<< "api_password=" << Password << "&" << "api_password=" << Password << "&"
<< "method=" << Method << "&"; << "method=" << Method << "&";
mVOIPMSSocket->get(QNetworkRequest(Url)); mVOIPMSSocket->get(QNetworkRequest(Url));
mLastRequestCmd = Method;
return RET_OK; return RET_OK;
} }
@ -116,22 +171,29 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con
void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply) void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply)
{ {
QByteArray Reply = NetworkReply->readAll(); QByteArray Reply = NetworkReply->readAll();
NetworkReply->deleteLater();
QJsonDocument JsonReply = QJsonDocument::fromJson(Reply); QJsonDocument JsonReply = QJsonDocument::fromJson(Reply);
QJsonObject JsonObject = JsonReply.object(); QJsonObject JsonObject = JsonReply.object();
QStringList Keys = JsonObject.keys(); QStringList Keys = JsonObject.keys();
if(JsonObject["status"].toString() == "success") if(JsonObject["status"].toString() == "success")
{ {
if(Keys.contains("sms")) if(mLastRequestCmd == "getSMS")
// if(Keys.contains("sms"))
{ {
QJsonArray SMSArray = JsonObject["sms"].toArray(); QJsonArray SMSArray = JsonObject["sms"].toArray();
SMSReceived(&SMSArray); SMSReceived(&SMSArray);
} }
else if(Keys.contains("dids")) else if(mLastRequestCmd == "getDIDsInfo")
// else if(Keys.contains("dids"))
{ {
QJsonArray DIDsInfoArray = JsonObject["dids"].toArray(); QJsonArray DIDsInfoArray = JsonObject["dids"].toArray();
DIDsInfoReceived(&DIDsInfoArray); DIDsInfoReceived(&DIDsInfoArray);
} }
else if(mLastRequestCmd == "sendSMS")
{
SendSMSAckReceived(true);
}
} }
else else
{ {
@ -140,7 +202,40 @@ void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply)
{ {
SMSReceived(0); 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) unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
@ -200,6 +295,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
} }
if(mFirstDownloadDone == true && NewMessages.size() > 0) if(mFirstDownloadDone == true && NewMessages.size() > 0)
{ {
mProgramHandle->NewSMSMessagesArrived(NewMessages);
qDebug() << "Added " << NewMessages.size() << " new SMS messages"; qDebug() << "Added " << NewMessages.size() << " new SMS messages";
qDebug("-----------------------------------------------------------------------"); qDebug("-----------------------------------------------------------------------");
qDebug(" "); qDebug(" ");
@ -240,6 +337,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
mSMSMessagesList.append(NewMessages); mSMSMessagesList.append(NewMessages);
if(mFirstDownloadDone == true && NewMessages.size() > 0) if(mFirstDownloadDone == true && NewMessages.size() > 0)
{ {
mProgramHandle->NewSMSMessagesArrived(NewMessages);
qDebug() << "Added " << NewMessages.size() << " new SMS messages"; qDebug() << "Added " << NewMessages.size() << " new SMS messages";
qDebug("-----------------------------------------------------------------------"); qDebug("-----------------------------------------------------------------------");
qDebug(" "); qDebug(" ");
@ -283,7 +382,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray)
mFirstDownloadDone = true; mFirstDownloadDone = true;
mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT); // mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT);
StartSMSCheckTimer();
qDebug("Timer started"); qDebug("Timer started");
} }
@ -327,6 +427,8 @@ unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr)
emit DIDSFetched(DIDs); emit DIDSFetched(DIDs);
} }
StartSMSCheckTimer();
return RET_OK; return RET_OK;
} }
@ -398,6 +500,18 @@ QString CVoipMsSMSClient::GetDefaultDID()
return mVOIPMsSettings.mDefaultDID; 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 //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 VOIPMS_RET_NO_DID_FOUND
}; };
class CMasterCtrl;
class CVoipMsSMSClient : public QObject class CVoipMsSMSClient : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -40,6 +42,8 @@ public:
QList<CSMSMessage> mSMSMessagesList; QList<CSMSMessage> mSMSMessagesList;
CMasterCtrl *mProgramHandle;
unsigned int GetDidFromUserAccount(const QString username, const QString Password); unsigned int GetDidFromUserAccount(const QString username, const QString Password);
unsigned int SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData); unsigned int SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData);
unsigned int NewSMSNotification(QString DID); unsigned int NewSMSNotification(QString DID);
@ -50,12 +54,20 @@ public:
int GetSMSCount(); int GetSMSCount();
QString GetDefaultDID(); QString GetDefaultDID();
int SendSMS(QList<CSMSMessage> *SMSList);
int SendSMS(CSMSMessage Message);
private: private:
QNetworkAccessManager *mVOIPMSSocket; QNetworkAccessManager *mVOIPMSSocket;
unsigned int SMSReceived(QJsonArray *sms); unsigned int SMSReceived(QJsonArray *sms);
unsigned int DIDsInfoReceived(QJsonArray *DIDsInfo); unsigned int DIDsInfoReceived(QJsonArray *DIDsInfo);
int SendSMSAckReceived(bool Success);
void StartSMSCheckTimer();
void StopSMSCheckTimer();
CVoipMSSMSSettings mVOIPMsSettings; CVoipMSSMSSettings mVOIPMsSettings;
@ -66,6 +78,8 @@ private:
QTimer *mCheckNewSMSTimer; QTimer *mCheckNewSMSTimer;
bool mFirstDownloadDone; bool mFirstDownloadDone;
QString mLastRequestCmd;
QList<CSMSMessage> mPendingSMSSendList;