SystemGui/Sources/SMSClient/SMSMasterCtrlInterface.cpp
Jean-Francois Martel 2c22dda0f4 Sprinkler
2017-04-23 10:16:06 -04:00

293 lines
8.7 KiB
C++

#include "SMSMasterCtrlInterface.h"
#include <QByteArray>
#include <QDataStream>
#include <QBuffer>
#include "SystemGui.h"
#include "Contact.h"
#include "SMSClient.h"
CSMSMasterCtrlInterface::CSMSMasterCtrlInterface(CSMSClient *ProgramHandle)
{
mDeviceAddress = 1;
mNetworkPort = 2182;
// mMasterCtrlAddress = "127.0.0.1";
// mNetworkPort = 6463;
// mMasterCtrlAddress = "192.168.0.100";
mMasterCtrlAddress = "mortel.myftp.org";
mNetworkCommSocket = 0;
mMyDeviceID = ID_SMS_CLIENT;
mProgramHandle = ProgramHandle;
}
CSMSMasterCtrlInterface::~CSMSMasterCtrlInterface()
{
if(mNetworkCommSocket !=0)
{
// mNetworkCommSocket->disconnectFromHost();
// delete mNetworkCommSocket;
}
}
//int CSMSMasterCtrlInterface::ConnectToMasterCtrl()
//{
//// if(mNetworkCommSocket == 0)
//// {
//// mNetworkCommSocket = new QTcpSocket();
//// }
//// connect(mNetworkCommSocket,SIGNAL(connected()),this,SLOT(NetworkSocketConnected()));
//// connect(mNetworkCommSocket,SIGNAL(disconnected()),this,SLOT(NetworkSocketDisconnected()));
//// connect(mNetworkCommSocket,SIGNAL(readyRead()),this,SLOT(NetworkSocketDataAvailable()));
//// mNetworkCommSocket->connectToHost(mMasterCtrlAddress,mNetworkPort);
// return RET_OK;
//}
int CSMSMasterCtrlInterface::DeviceConnectedToMaster(bool Connected)
{
if(Connected)
{
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
}
else
{
//???
}
return RET_OK;
}
int CSMSMasterCtrlInterface::DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderDeviceID, int SenderAddress, int MessageID, int DataSize, QByteArray Data)
{
Q_UNUSED(DataSize)
// if(TargetDeviceID == ID_ETHERNET_VIRTUAL)
// {
// switch(MessageID)
// {
// case ETH_NETWK_DEVICE_INFO_REQUEST:
// {
// QByteArray Frame,ResponseData;
// ResponseData.append((char)ID_SMS_CLIENT);
// ResponseData.append((char)mDeviceAddress);
// Frame = GetTxPacket(ETH_NETWK_DEVICE_INFO_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_ETHERNET_VIRTUAL,mDeviceAddress);
// mNetworkCommSocket->write(Frame);
// break;
// }
// case ETH_NETWK_CONNECTION_REFUSED:
// {
// qDebug("MasterCtrl connection refused");
// mNetworkCommSocket->close();
// delete mNetworkCommSocket;
// mNetworkCommSocket = 0;
// break;
// }
// case ETH_NETWK_SET_DEVICE_INFO_ACK:
// {
// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
// qDebug("MasterCtrl accepted connection");
// break;
// }
// case ETH_NETWK_DEVICE_INFO_RESPONSE:
// default:
// {
// break;
// }
// }
// }
/* else*/ if(TargetDeviceID == ID_SMS_CLIENT && (TargetDeviceAddress == BROADCAST_VALUE || TargetDeviceAddress == mDeviceAddress))
{
switch(MessageID)
{
case SMS_CLIENT_DEVICE_ACK:
{
break;
}
case SMS_CLIENT_DEVICE_STATUS_REQUEST:
{
QByteArray Frame,ResponseData;
ResponseData.append(ACK);
ResponseData.append((char)SMS_CLIENT_DEVICE_STATUS_REQUEST);
Frame = GetTxPacket(SMS_CLIENT_DEVICE_STATUS_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress);
mNetworkCommSocket->write(Frame);
// qDebug("Rx Status Request");
break;
}
case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE:
{
QString DidInfo;
QDataStream *Strm = new QDataStream(Data);
*Strm >> DidInfo;
delete Strm;
qDebug("Rx DID info: %s",DidInfo.toUtf8().data());
mProgramHandle->SetDIDDatabase(DidInfo);
// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
break;
}
case SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE:
{
QList<CSMSMessage> RAWSMSList;
QDataStream *Stream = new QDataStream(Data);
CSMSMessage NewMsg;
int NbMsg;
*Stream >> NbMsg;
for(int i = 0; i < NbMsg; i++)
{
*Stream >> NewMsg;
RAWSMSList.append(NewMsg);
}
mProgramHandle->SetAllMsgsDatabase("",&RAWSMSList);
RAWSMSList.clear();
delete Stream;
break;
}
case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION:
{
QList<CSMSMessage> RAWSMSList;
QDataStream *Stream = new QDataStream(Data);
CSMSMessage NewMsg;
int NbMsg;
*Stream >> NbMsg;
for(int i = 0; i < NbMsg; i++)
{
*Stream >> NewMsg;
RAWSMSList.append(NewMsg);
}
mProgramHandle->NewMessagesEvent(&RAWSMSList);
RAWSMSList.clear();
delete Stream;
break;
}
case SMS_CLIENT_DEVICE_SEND_SMS_ACK:
{
QDataStream *Stream = new QDataStream(Data);
qint32 Success;
*Stream >> Success;
if(Success == 1)
{
qDebug("SMS Sent!!!");
}
else
{
qDebug("Send SMS Failed");
}
delete Stream;
break;
}
case SMS_CLIENT_DEVICE_GET_CONTACTS_RESPONSE:
{
QList<CContact> ContactsList;
QDataStream *Stream = new QDataStream(Data);
CContact NewContact;
int NbContact;
*Stream >> NbContact;
for(int i = 0; i < NbContact; i++)
{
*Stream >> NewContact;
ContactsList.append(NewContact);
}
mProgramHandle->SetContacts(&ContactsList);
ContactsList.clear();
qDebug("Contacts downloaded!");
delete Stream;
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
break;
}
case SMS_CLIENT_DEVICE_CONTACTS_CHANGED_NOTIFICATION:
{
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress));
break;
}
case SMS_CLIENT_DEVICE_SEND_SMS_REQUEST:
case SMS_CLIENT_DEVICE_STATUS_RESPONSE:
case SMS_CLIENT_DEVICE_DID_INFO_REQUEST:
case SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST:
default:
{
qDebug("SMSDevice: Invalid Ethernet MSg received: %d",MessageID);
break;
}
}
}
return RET_OK;
}
//int CSMSMasterCtrlInterface::DisconnectMasterCtrl()
//{
// if(mNetworkCommSocket != 0)
// {
// mNetworkCommSocket->close();
// // mNetworkCommSocket->deleteLater();
// }
// return RET_OK;
//}
//void CSMSMasterCtrlInterface::NetworkSocketConnected()
//{
// qDebug("Connected to MasterCtrl");
//}
//void CSMSMasterCtrlInterface::NetworkSocketDataAvailable()
//{
// AnalyzeRxBuffer(mNetworkCommSocket->readAll());
//}
void CSMSMasterCtrlInterface::SendSMS(CSMSMessage Message)
{
QByteArray FrameData;
QBuffer FrameBuffer(&FrameData);
FrameBuffer.open(QIODevice::ReadWrite);
QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer);
qint32 NbMsg = 1;
*FrameDataStrm << NbMsg << Message;
FrameBuffer.seek(0);
mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_SEND_SMS_REQUEST,0,FrameData,FrameData.size(),1,ID_MASTER));
FrameBuffer.close();
delete FrameDataStrm;
}
//void CSMSMasterCtrlInterface::NetworkSocketDisconnected()
//{
// qDebug("Disconnected from MasterCtrl");
//// delete mNetworkCommSocket;
//// mNetworkCommSocket = 0;
//}