--- trunk/FlisServer/FlisServerDlg.cpp 2007/11/28 16:24:04 81 +++ trunk/FlisServer/FlisServerDlg.cpp 2007/12/03 14:40:44 138 @@ -4,8 +4,8 @@ #include "stdafx.h" #include "FlisServer.h" #include "FlisServerDlg.h" -#include ".\flisserverdlg.h" #include +#include ".\flisserverdlg.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -51,7 +51,6 @@ : CDialog(CFlisServerDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); - db = 0; } void CFlisServerDlg::DoDataExchange(CDataExchange* pDX) @@ -65,9 +64,9 @@ ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP - ON_BN_CLICKED(IDOK, OnBnClickedOk) - ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel) - ON_BN_CLICKED(IDC_test, OnBnClickedtest) + ON_BN_CLICKED(IDCLOSE, OnBnClickedClose) + ON_BN_CLICKED(IDC_GSMPIN, OnBnClickedGsmpin) + ON_BN_CLICKED(IDC_Start, OnBnClickedStart) END_MESSAGE_MAP() @@ -102,8 +101,8 @@ // TODO: Add extra initialization here StartSerial(); - //SetPin(); DBConnect(); + ResetSms = 0; return TRUE; // return TRUE unless you set the focus to a control } @@ -158,18 +157,45 @@ } int CFlisServerDlg::StartSerial(void) { + int Baud; - CString SerialPort = "COM3"; + ConfigFile config; + try { + config.ReadSettings(); + } catch(...) { + MessageBox("Could not open config file"); + OnOK(); + return true; + } + Baud = 1200; - if( Serial.isOpen() ){ - Serial.close(); - Serial.open( SerialPort, Baud ); + if( Serial.isOpen() ) + { + try + { + Serial.close(); + Serial.open( config.comport, Baud ); + } + catch (exception* e) + { + MessageBox( "Serial.open() exception" ); + return 0; + } } - else { - Serial.open( SerialPort, Baud ); + else + { + try + { + Serial.open( config.comport, Baud ); + } + catch (exception* e) + { + MessageBox( "Serial.open() exception 2" ); + return 0; + } } - + return 0; } @@ -178,62 +204,13 @@ std::vector buf; while(Serial.getComstat().cbInQue > 0) { - unsigned char data = Serial.readByte(); + unsigned char data = Serial.readByte(); - buf.push_back(data); + buf.push_back(data); } return buf; } -void CFlisServerDlg::OnBnClickedOk() -{ - // TODO: Add your control notification handler code here - OnOK(); - if( Serial.isOpen() ){ - Serial.close(); - } - - if (db != 0) - { - //db->Close(); - delete db; - db=0; - } -} - -void CFlisServerDlg::OnBnClickedCancel() -{ - // TODO: Add your control notification handler code here - OnCancel(); - if( Serial.isOpen() ){ - Serial.close(); - } - - if (db != 0) - { - db->Close(); - delete db; - db = 0; - } -} - -void CFlisServerDlg::OnBnClickedtest() -{ - // TODO: Add your control notification handler code here - CString tekst; - std::vector data; - data.push_back('a'); - data.push_back('t'); - data.push_back('+'); - data.push_back('c'); - data.push_back('m'); - data.push_back('g'); - data.push_back('r'); - data.push_back('='); - data.push_back('1'); - writeFrame(data); - ReadSms(); -} void CFlisServerDlg::writeFrame(std::vector data) { for (int i=0; i data; @@ -263,91 +240,122 @@ data.push_back('5'); writeFrame(data); - Sleep(750); +} +void CFlisServerDlg::SendSmsData(std::vector data) +{ + + for (int i=0; i 0) { + CString tekst; std::vector answer = readFrame(); Sleep(50); - char array1[25]; - int i; - for (int i=0; i data) +void CFlisServerDlg::SendSmsHead(std::vector tlfnr) { - for (int i=0; i atcommand; + atcommand.push_back('a'); + atcommand.push_back('t'); + atcommand.push_back('+'); + atcommand.push_back('c'); + atcommand.push_back('m'); + atcommand.push_back('g'); + atcommand.push_back('s'); + atcommand.push_back('='); + atcommand.push_back('"'); + int s = (atcommand.size() -1 ); + + for (int i=0; i<(atcommand.size()); i++) { - Serial.writeByte( data[i] ); + Serial.writeByte( atcommand[i] ); Sleep(5); } - Serial.writeByte(0x1A); - Sleep(100); - -} -void CFlisServerDlg::SendSmsHead(std::vector data) -{ - for (int i=0; iOpenEx(dsn, CDatabase::noOdbcDialog); + ConfigFile config; + try { + config.ReadSettings(); + } catch(...) { + MessageBox("Could not open config file"); + } + dsn.Format("ODBC;Description=asd;DRIVER=PostgreSQL ANSI;SERVER=%s; uid=%s;password=%s;database=%s;sslmode=prefer",config.host,config.username, config.password, config.database); + db.OpenEx(dsn, CDatabase::noOdbcDialog); } -void CFlisServerDlg::DBRead() +vector CFlisServerDlg::DBReadCommands(void) { + vector buffer; + CString SQL, IDnr, CommandID, InstallationsID; + SQL = "select id,date_trunc('second', created) as created,executed,commandid,installationid from command WHERE executed IS NULL ORDER BY created ASC LIMIT 1;"; + CRecordset rs(&db); + rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL); + if (rs.GetRecordCount()>0) + { + rs.MoveFirst(); + + Commands Mycom; + rs.GetFieldValue((short)0, IDnr); + rs.GetFieldValue(3, CommandID); + rs.GetFieldValue(4, InstallationsID); + + Mycom.IDnr = IDnr; + Mycom.CommandID = CommandID; + Mycom.InstallationsID = InstallationsID; + + buffer.push_back(Mycom); + rs.MoveNext(); + + } + rs.Close(); + return buffer; } void CFlisServerDlg::ReadSms() { CString tekst, oldtekst; - Sleep(950); + Sleep(950); //Holder en pause for at lade hele sms'en komme ind i serial køen. if(Serial.getComstat().cbInQue > 0) { std::vector answer = readFrame(); Sleep(50); - char array1[250]; - int i; - for (int i=0; i0) + { + rs.MoveFirst(); + rs.GetFieldValue((short)0,InstallNR); + } + rs.Close(); + + SQL.Format("insert into logtable (logtime,temperature,flamedetector,solidfuelempty,conveyorerror,powerfailure,messagenr,installationnr) Values (now(),%s,'%s','%s','%s','%s',%s,%s)",Temper, Flamme, Flis, FremFejl, PowerFail, SmsCount,InstallNR); + try + { + db.ExecuteSQL(SQL); + } + catch(CDBException* e) + { + MessageBox(e->m_strError); + } + AppendText("Sms added to Log"); + Sleep(150); } CString CFlisServerDlg::Splitter(CString& fyrdata) { @@ -412,4 +410,390 @@ fyrdata = fyrdata.Right( fyrdata.GetLength() - pos -1); } return Output; +} +void CFlisServerDlg::OnBnClickedClose() +{ + // TODO: Add your control notification handler code here + continueThread = 0; + DeleteSms(); + + Sleep(500); + if( Serial.isOpen() ) + { + Serial.close(); + } + + if(db.IsOpen()) + { + db.Close(); + } + + OnOK(); + +} + +void CFlisServerDlg::OnBnClickedGsmpin() +{ + // TODO: Add your control notification handler code here + m_Textwindow.SetWindowText("Indsætter Pinkode, efterfuldt af 60sec pause"); + UpdateWindow(); + SetPin(); + Sleep(50000); + + while (Serial.getComstat().cbInQue > 0) + { + Serial.readByte(); //Flush the incoming queue + } + + OnBnClickedStart(); +} +void CFlisServerDlg::DeleteSms() +{ + vector atcommand; + atcommand.push_back('a'); + atcommand.push_back('t'); + atcommand.push_back('+'); + atcommand.push_back('c'); + atcommand.push_back('m'); + atcommand.push_back('g'); + atcommand.push_back('d'); + atcommand.push_back('='); + atcommand.push_back('1'); + atcommand.push_back(','); + atcommand.push_back('3'); + + writeFrame(atcommand); + Sleep(500); +} +UINT threadWrapper(LPVOID thread) +{ + CFlisServerDlg *t = (CFlisServerDlg*) thread; + t->runthread(); + return 0; +} + +void CFlisServerDlg::startthread() +{ + AfxBeginThread(threadWrapper, (LPVOID) this); +} + +void CFlisServerDlg::runthread() +{ + while (continueThread != 0) + { + Reader(); + } +} +void CFlisServerDlg::Reader() +{ + if(Serial.getComstat().cbInQue > 0) + { + Sleep(250); + std::vector answer = readFrame(); + Sleep(500); + CString tekst, oldtekst; + int lol; + + for (int i=0; i data; + data.push_back('a'); + data.push_back('t'); + data.push_back('+'); + data.push_back('c'); + data.push_back('m'); + data.push_back('g'); + data.push_back('r'); + data.push_back('='); + + for (int i=0; i< smscount.GetLength(); i++) + { + data.push_back(smscount[i]); + } + m_Textwindow.GetWindowText(oldteskst); + oldteskst.Append("\r\n"); + for (int i=0; i data; + data = DBReadCommands(); + for (int i=0; i 1) + { + sInstallationsID = data[i].InstallationsID; + } + } + + if (commandtest > 1) + { + iAll = 0; + } + + if (sIDnr.GetLength() > 0) + { + SendConfig(sIDnr,sCommandID,sInstallationsID); + } + Sleep(500); + } +} +void CFlisServerDlg::SendConfig(CString IDnr,CString CommandID,CString InstallationsID) +{ + CString ServerTlfNr; + int i = 0; + ServerTlfNr = "29860132"; + + + std::vector inst; + inst = DBReadPhone(InstallationsID); + while (i < inst.size()) + { + CString TlfNr, Imei, updaterate; + TlfNr.Empty(); + Imei.Empty(); + updaterate.Empty(); + + CString dataen = inst[i].InstPhoneNr; + TlfNr.Append(dataen); + CString Imeidata = inst[i].Imei; + Imei.Append(Imeidata); + CString updaterat = inst[i].Updaterate; + updaterate.Append(updaterat); + i++; + + vector tlfnr; + for (int i=0; i smsdata; + + for (int i=0; i CFlisServerDlg::DBReadPhone(CString sInstallationsID) +{ + vector buffer; + + CString SQL, phonenr, imei, updaterate; + int installernull; + Installation Myinst; + installernull = atoi(sInstallationsID); + if (installernull > 1) + { + SQL.Format("select installationphonenr, imei, updaterate from installation WHERE id = %s", sInstallationsID); + } + else if(installernull < 2) + { + SQL.Format("select installationphonenr, imei, updaterate from installation"); + } + CRecordset rs(&db); + rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL); + if (rs.GetRecordCount()>0) + { + rs.MoveFirst(); + while(!rs.IsEOF()) + { + + rs.GetFieldValue((short)0,phonenr); + rs.GetFieldValue(1,imei); + rs.GetFieldValue(2,updaterate); + + Myinst.InstPhoneNr = phonenr; + Myinst.Imei = imei; + Myinst.Updaterate = updaterate; + + buffer.push_back(Myinst); + rs.MoveNext(); + } + } + rs.Close(); + return buffer; +} +int CFlisServerDlg::tversum(__int64 input) +{ + int sum = 0; + while (input > 0) + { + sum += (input %10); + input /= 10; + } + return sum; +} +void CFlisServerDlg::OnBnClickedStart() +{ +// TODO: Add your control notification handler code here + + continueThread = 1; + m_Textwindow.SetWindowText("Started"); + AfxBeginThread(threadWrapper,AfxGetMainWnd()); +} +void CFlisServerDlg::AppendText(CString s) +{ + CString Tekst; + m_Textwindow.GetWindowText(Tekst); + Tekst.Append("\r\n"); + Tekst.Append(s); + m_Textwindow.SetWindowText(Tekst); + +} +void ConfigFile::ReadSettings() +{ + ifstream file("Server-Settings.ini"); + if (!file.is_open()) + throw("Could not open file"); + + char buf[200]; + while (!file.eof() ) { + file.getline(buf,200); + CString tmp(buf); + + if (tmp.GetAt(0) == '#') + continue; + + int pos = tmp.Find('='); + if (pos>0) { + CString key = tmp.Left(pos).Trim().MakeLower();; + CString value = tmp.Right(tmp.GetLength()-pos-1).Trim(); + + if (key == "host") + host = value; + else if (key == "username") + username = value; + else if (key == "password") + password = value; + else if (key == "database") + database = value; + else if (key == "comport") + comport = value; + } + + } + + file.close(); } \ No newline at end of file