/[H9]/trunk/FlisServer/FlisServerDlg.cpp
ViewVC logotype

Diff of /trunk/FlisServer/FlisServerDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 105 by kevin, Fri Nov 30 07:24:35 2007 UTC revision 144 by kevin, Tue Dec 4 13:26:00 2007 UTC
# Line 4  Line 4 
4  #include "stdafx.h"  #include "stdafx.h"
5  #include "FlisServer.h"  #include "FlisServer.h"
6  #include "FlisServerDlg.h"  #include "FlisServerDlg.h"
 #include ".\flisserverdlg.h"  
7  #include <vector>  #include <vector>
8    #include ".\flisserverdlg.h"
9    
10  #ifdef _DEBUG  #ifdef _DEBUG
11  #define new DEBUG_NEW  #define new DEBUG_NEW
# Line 64  BEGIN_MESSAGE_MAP(CFlisServerDlg, CDialo Line 64  BEGIN_MESSAGE_MAP(CFlisServerDlg, CDialo
64          ON_WM_PAINT()          ON_WM_PAINT()
65          ON_WM_QUERYDRAGICON()          ON_WM_QUERYDRAGICON()
66          //}}AFX_MSG_MAP          //}}AFX_MSG_MAP
         ON_BN_CLICKED(IDC_test, OnBnClickedtest)  
67          ON_BN_CLICKED(IDCLOSE, OnBnClickedClose)          ON_BN_CLICKED(IDCLOSE, OnBnClickedClose)
68          ON_BN_CLICKED(IDC_GSMPIN, OnBnClickedGsmpin)          ON_BN_CLICKED(IDC_GSMPIN, OnBnClickedGsmpin)
69            ON_BN_CLICKED(IDC_Start, OnBnClickedStart)
70  END_MESSAGE_MAP()  END_MESSAGE_MAP()
71    
72    
# Line 102  BOOL CFlisServerDlg::OnInitDialog() Line 102  BOOL CFlisServerDlg::OnInitDialog()
102          // TODO: Add extra initialization here          // TODO: Add extra initialization here
103          StartSerial();          StartSerial();
104          DBConnect();          DBConnect();
105            ResetSms = 0;
106                    
107          return TRUE;  // return TRUE  unless you set the focus to a control          return TRUE;  // return TRUE  unless you set the focus to a control
108  }  }
# Line 156  HCURSOR CFlisServerDlg::OnQueryDragIcon( Line 157  HCURSOR CFlisServerDlg::OnQueryDragIcon(
157  }  }
158  int CFlisServerDlg::StartSerial(void)  int CFlisServerDlg::StartSerial(void)
159  {  {
160            
161          int Baud;          int Baud;
         CString SerialPort = "COM3";  
162    
163            ConfigFile config;
164            try {
165                    config.ReadSettings();
166            } catch(...) {
167                    MessageBox("Could not open config file");
168                    OnOK();
169                    return true;
170            }
171            
172          Baud = 1200;          Baud = 1200;
173          if( Serial.isOpen() ){          if( Serial.isOpen() )
174                  Serial.close();          {
175                  Serial.open( SerialPort, Baud );                  try
176                    {
177                            Serial.close();
178                            Serial.open( config.comport, Baud );
179                    }
180                    catch (exception* e)
181                    {
182                            MessageBox( "Serial.open() exception" );
183                            return 0;
184                    }
185          }          }
186          else {          else
187                  Serial.open( SerialPort, Baud );          {
188                    try
189                    {
190                            Serial.open( config.comport, Baud );
191                    }
192                    catch (exception* e)
193                    {
194                            MessageBox( "Serial.open() exception 2" );
195                            return 0;
196                    }
197          }          }
198            
199                                    
200  return 0;  return 0;
201  }  }
# Line 176  std::vector<unsigned char> CFlisServerDl Line 204  std::vector<unsigned char> CFlisServerDl
204          std::vector<unsigned char> buf;          std::vector<unsigned char> buf;
205          while(Serial.getComstat().cbInQue > 0)          while(Serial.getComstat().cbInQue > 0)
206          {          {
207          unsigned char data = Serial.readByte();                  unsigned char data = Serial.readByte();
208    
209          buf.push_back(data);                  buf.push_back(data);
210          }          }
211          return buf;          return buf;
212  }  }
 void CFlisServerDlg::OnBnClickedtest()  
 {  
         // TODO: Add your control notification handler code here  
 /*        
 ////////////////Read sms ting//////////////////  
         CString tekst;  
         std::vector<unsigned char> 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');  
213    
         writeFrame(data);  
         ReadSms();  
 ////////////////Read sms ting//////////////////  
 */  
 /*  
 ////////////////DBRead stuff//////////////////  
         CString testdata;  
         std::vector<Commands> data;  
         data = DBRead();  
         for (int i=0; i<data.size(); i++)  
         {  
                 testdata.Append(data[i].IDnr);  
                 testdata.Append(data[i].CommandID);  
                 testdata.Append(data[i].InstallationsID);  
         }  
         m_Textwindow.SetWindowText(testdata);  
 ////////////////DBRead stuff//////////////////    
 */  
 /*        
 ///////////////Send sms stuff/////////////////  
         vector<unsigned char> tlfnr;  
         vector<unsigned char> smsdata;  
         tlfnr.push_back('2');  
         tlfnr.push_back('9');  
         tlfnr.push_back('7');  
         tlfnr.push_back('2');  
         tlfnr.push_back('2');  
         tlfnr.push_back('6');  
         tlfnr.push_back('0');  
         tlfnr.push_back('3');  
   
         SendSmsHead(tlfnr);  
   
          //35:29860132:75 <--- demo pakke;  
         smsdata.push_back('3');  
         smsdata.push_back('5');  
         smsdata.push_back(':');  
         smsdata.push_back('2');  
         smsdata.push_back('9');  
         smsdata.push_back('8');  
         smsdata.push_back('6');  
         smsdata.push_back('0');  
         smsdata.push_back('1');  
         smsdata.push_back('3');  
         smsdata.push_back('2');  
         smsdata.push_back(':');  
         smsdata.push_back('7');  
         smsdata.push_back('5');  
   
         SendSmsData(smsdata);  
 ///////////////Send sms stuff/////////////////  
 */  
 }  
214  void CFlisServerDlg::writeFrame(std::vector<unsigned char> data)  void CFlisServerDlg::writeFrame(std::vector<unsigned char> data)
215  {  {
216          for (int i=0; i<data.size(); i++)          for (int i=0; i<data.size(); i++)
# Line 263  void CFlisServerDlg::writeFrame(std::vec Line 222  void CFlisServerDlg::writeFrame(std::vec
222          Sleep(100);          Sleep(100);
223    
224  }  }
225  int CFlisServerDlg::SetPin(void)  void CFlisServerDlg::SetPin()
226  {  {
227          CString tekst;          CString tekst;
228          std::vector<unsigned char> data;          std::vector<unsigned char> data;
# Line 281  int CFlisServerDlg::SetPin(void) Line 240  int CFlisServerDlg::SetPin(void)
240          data.push_back('5');          data.push_back('5');
241    
242          writeFrame(data);          writeFrame(data);
         Sleep(750);  
         if(Serial.getComstat().cbInQue > 0)  
         {  
                 std::vector<unsigned char> answer = readFrame();  
                 Sleep(50);  
                         char array1[25];  
                         int i;  
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 array1[i] = answer[i];  
                         }  
                   
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 if ((array1[i] != 0x0A) && (array1[i] != 0x0D))  
                                 {  
                                         tekst.AppendChar(array1[i]);  
                                 }  
                         }  
                         m_Textwindow.SetWindowText(tekst);  
         }  
 return 0;  
243  }  }
244  void CFlisServerDlg::SendSmsData(std::vector<unsigned char> data)  void CFlisServerDlg::SendSmsData(std::vector<unsigned char> data)
245  {        {      
# Line 319  void CFlisServerDlg::SendSmsData(std::ve Line 256  void CFlisServerDlg::SendSmsData(std::ve
256                  CString tekst;                  CString tekst;
257                  std::vector<unsigned char> answer = readFrame();                  std::vector<unsigned char> answer = readFrame();
258                  Sleep(50);                  Sleep(50);
259                          char array1[25];  
260                          int i;                  for (int i=0; i<answer.size(); i++)
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 array1[i] = answer[i];  
                         }  
                   
                         for (int i=0; i<answer.size(); i++)  
261                          {                          {
262                                  if ((array1[i] != 0x0A) && (array1[i] != 0x0D))                                  if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
263                                  {                                  {
264                                          tekst.AppendChar(array1[i]);                                          tekst.AppendChar(answer[i]);
265                                  }                                  }
266                          }                          }
267                          m_Textwindow.SetWindowText(tekst);                          AppendText(tekst);
268          }          }
269    
270  }  }
271  void CFlisServerDlg::SendSmsHead(std::vector<unsigned char> data)  void CFlisServerDlg::SendSmsHead(std::vector<unsigned char> tlfnr)
272  {  {
273          vector<unsigned char> atcommand;          vector<unsigned char> atcommand;
274          atcommand.push_back('a');          atcommand.push_back('a');
# Line 357  void CFlisServerDlg::SendSmsHead(std::ve Line 288  void CFlisServerDlg::SendSmsHead(std::ve
288                  Sleep(5);                  Sleep(5);
289          }          }
290                    
291          for (int i=0; i<data.size(); i++)          for (int i=0; i<tlfnr.size(); i++)
292          {          {
293                  Serial.writeByte( data[i] );                  Serial.writeByte( tlfnr[i] );
294                  Sleep(5);                  Sleep(5);
295          }          }
296          Serial.writeByte(atcommand[s]);          Serial.writeByte(atcommand[s]);
# Line 369  void CFlisServerDlg::SendSmsHead(std::ve Line 300  void CFlisServerDlg::SendSmsHead(std::ve
300  void CFlisServerDlg::DBConnect()  void CFlisServerDlg::DBConnect()
301  {  {
302          CString dsn;          CString dsn;
303          dsn.Format("ODBC;Description=asd;DRIVER=PostgreSQL ANSI;SERVER=192.168.134.132; uid=serrenab;password=furnacemonitor;database=flisfyr;sslmode=prefer");          ConfigFile config;
304            try {
305                    config.ReadSettings();
306            } catch(...) {
307                    MessageBox("Could not open config file");
308            }
309            
310            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);
311          db.OpenEx(dsn, CDatabase::noOdbcDialog);          db.OpenEx(dsn, CDatabase::noOdbcDialog);
312  }  }
313  vector<Commands> CFlisServerDlg::DBRead(void)  vector<Commands> CFlisServerDlg::DBReadCommands(void)
314  {  {
315          vector<Commands> buffer;          vector<Commands> buffer;
316    
317          CString SQL, IDnr, CommandID, InstallationsID;          CString SQL, IDnr, CommandID, InstallationsID;
318          SQL = "select id,date_trunc('second', created) as created,executed,commandid,installationid from command WHERE executed IS NULL;";          SQL = "select id,date_trunc('second', created) as created,executed,commandid,installationid from command WHERE executed IS NULL ORDER BY created ASC LIMIT 1;";
319          CRecordset rs(&db);          CRecordset rs(&db);
320          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
321          if (rs.GetRecordCount()>0)          if (rs.GetRecordCount()>0)
322          {          {
323                  rs.MoveFirst();                  rs.MoveFirst();
324                  while(!rs.IsEOF())                          
                 {  
325                  Commands Mycom;                  Commands Mycom;
326                  rs.GetFieldValue((short)0, IDnr);                  rs.GetFieldValue((short)0, IDnr);
327                  rs.GetFieldValue(3, CommandID);                  rs.GetFieldValue(3, CommandID);
# Line 396  vector<Commands> CFlisServerDlg::DBRead( Line 333  vector<Commands> CFlisServerDlg::DBRead(
333    
334                  buffer.push_back(Mycom);                  buffer.push_back(Mycom);
335                  rs.MoveNext();                  rs.MoveNext();
336                  }  
337          }          }
338          rs.Close();          rs.Close();
339          return buffer;          return buffer;
# Line 404  vector<Commands> CFlisServerDlg::DBRead( Line 341  vector<Commands> CFlisServerDlg::DBRead(
341  void CFlisServerDlg::ReadSms()  void CFlisServerDlg::ReadSms()
342  {  {
343          CString tekst, oldtekst;          CString tekst, oldtekst;
344          Sleep(950);          Sleep(950);             //Holder en pause for at lade hele sms'en komme ind i serial køen.
345          if(Serial.getComstat().cbInQue > 0)          if(Serial.getComstat().cbInQue > 0)
346          {          {
347                  std::vector<unsigned char> answer = readFrame();                  std::vector<unsigned char> answer = readFrame();
348                  Sleep(50);                  Sleep(50);
349                          char array1[250];  
                         int i;  
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 array1[i] = answer[i];  
                         }  
                   
350                          for (int i=0; i<answer.size(); i++)                          for (int i=0; i<answer.size(); i++)
351                          {                          {
352                                  if ((array1[i] != 0x0A) && (array1[i] != 0x0D))                                  if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
353                                  {                                  {
354                                          tekst.AppendChar(array1[i]);                                          tekst.AppendChar(answer[i]);
355                                  }                                  }
356                          }                          }
357    
358                          m_Textwindow.GetWindowText(oldtekst);                          AppendText(tekst);
                         oldtekst.Append("\r\n");  
                         oldtekst.Append(tekst);  
                         m_Textwindow.SetWindowText(oldtekst);  
359                          SmsSplit(tekst);                          SmsSplit(tekst);
360          }          }
361  }  }
# Line 436  void CFlisServerDlg::SmsSplit(CString da Line 364  void CFlisServerDlg::SmsSplit(CString da
364          CString FyrData, TlfNr, SmsCount, Temper, Flamme, Flis, FremFejl, PowerFail, oldtekst;          CString FyrData, TlfNr, SmsCount, Temper, Flamme, Flis, FremFejl, PowerFail, oldtekst;
365          char CharData[150];          char CharData[150];
366          strcpy(CharData,data);          strcpy(CharData,data);
367            TlfNr = data.Mid(24,8);
368            FyrData = data.Mid(57,data.GetLength()-59);
369            FyrData.Append(":");
370    
371          int s=22;          if (FyrData.MakeLower() == "conf ok:")
         for (int i=0; i<=7; i++)  
         {  
                 TlfNr.AppendChar(CharData[s]);  
                 s++;  
         }  
   
         for (int s=55; s<=(data.GetLength()-3); s++)  
372          {          {
373                  FyrData.AppendChar(CharData[s]);                  HandleAcknowledge(TlfNr);
374                    return;
375          }          }
         FyrData.Append(":");  
376                    
377          SmsCount = Splitter(FyrData);          SmsCount = Splitter(FyrData);
378          Temper = Splitter(FyrData);          Temper = Splitter(FyrData);
# Line 456  void CFlisServerDlg::SmsSplit(CString da Line 380  void CFlisServerDlg::SmsSplit(CString da
380          Flis = Splitter(FyrData);          Flis = Splitter(FyrData);
381          FremFejl = Splitter(FyrData);          FremFejl = Splitter(FyrData);
382          PowerFail = Splitter(FyrData);          PowerFail = Splitter(FyrData);
383  ///////////////////////////////////////////////////////////////////////////////////////////////////////                  
384  ///////////////////// Her skal sendes data til databasen //////////////////////////////////////////////                  CString SQL, Textwindow, InstallNR;
385                  m_Textwindow.GetWindowText(oldtekst);                  SQL.Format("select ID from installation where installationphonenr=%s",TlfNr);
386                  oldtekst.Append("\r\n");          
387                  oldtekst.Append("På næste linie kommer SmsCount. \r\n");                  CRecordset rs(&db);
388                  oldtekst.Append(SmsCount);                  rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
389                  oldtekst.Append("\r\n");                  if (rs.GetRecordCount()>0)
390                  oldtekst.Append("På næste linie kommer Temper. \r\n");                  {
391                  oldtekst.Append(Temper);                          rs.MoveFirst();        
392                  oldtekst.Append("\r\n");                          rs.GetFieldValue((short)0,InstallNR);
393                  oldtekst.Append("På næste linie kommer Flamme. \r\n");                  }
394                  oldtekst.Append(Flamme);                  rs.Close();
395                  oldtekst.Append("\r\n");  
396                  oldtekst.Append("På næste linie kommer Flis. \r\n");                  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);
397                  oldtekst.Append(Flis);                  try
398                  oldtekst.Append("\r\n");                  {
399                  oldtekst.Append("På næste linie kommer FremFejl. \r\n");                  db.ExecuteSQL(SQL);
400                  oldtekst.Append(FremFejl);                  }
401                  oldtekst.Append("\r\n");                  catch(CDBException* e)
402                  oldtekst.Append("På næste linie kommer PowerFail. \r\n");                  {
403                  oldtekst.Append(PowerFail);                          MessageBox(e->m_strError);
404                  m_Textwindow.SetWindowText(oldtekst);                  }
405  ///////////////////////////////////////////////////////////////////////////////////////////////////////                  AppendText("Sms added to Log");
406  ///////////////////// Her skal sendes data til databasen //////////////////////////////////////////////                  Sleep(150);
407  }  }
408  CString CFlisServerDlg::Splitter(CString& fyrdata)  CString CFlisServerDlg::Splitter(CString& fyrdata)
409  {  {
# Line 496  CString CFlisServerDlg::Splitter(CString Line 420  CString CFlisServerDlg::Splitter(CString
420  void CFlisServerDlg::OnBnClickedClose()  void CFlisServerDlg::OnBnClickedClose()
421  {  {
422          // TODO: Add your control notification handler code here          // TODO: Add your control notification handler code here
423                    continueThread = 0;
424            DeleteSms();
425    
426            Sleep(500);
427          if( Serial.isOpen() )          if( Serial.isOpen() )
428          {          {
429                  Serial.close();                  Serial.close();
# Line 504  void CFlisServerDlg::OnBnClickedClose() Line 431  void CFlisServerDlg::OnBnClickedClose()
431                    
432          if(db.IsOpen())          if(db.IsOpen())
433          {          {
434          db.Close();                  db.Close();
435          }          }
436            
437          OnOK();          OnOK();
438    
439  }  }
440    
441  void CFlisServerDlg::OnBnClickedGsmpin()  void CFlisServerDlg::OnBnClickedGsmpin()
442  {  {
443          // TODO: Add your control notification handler code here          // TODO: Add your control notification handler code here
444            bool ready = true;
445            m_Textwindow.SetWindowText("Indsætter Pinkode, og venter på modem bliver klar");
446            UpdateWindow();
447          SetPin();          SetPin();
448            Sleep(500);
449    
450            while (ready == true)
451            {
452                    if (Serial.getComstat().cbInQue > 120)
453                    {
454                            std::vector<unsigned char> answer = readFrame();
455                            CString tekst;
456                    
457                            for (int i=0; i<answer.size(); i++)
458                            {
459                                    if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
460                                    {
461                                            tekst.AppendChar(answer[i]);
462                                    }
463                            }
464                            int n = tekst.Find("WIND: 11",0);
465                            if (n > -1)
466                            {
467                                    ready = false;
468                            }
469                            else
470                            {
471                                    AppendText(tekst);
472                            }
473                    }
474            }
475            Sleep(100); //Give the modem a chance to send the last data
476            while(Serial.getComstat().cbInQue > 0)
477            {
478                    Serial.readByte(); //Flush the incoming queue
479                    Sleep(1);
480            }
481            OnBnClickedStart();
482    }
483    void CFlisServerDlg::DeleteSms()
484    {
485            vector<unsigned char> atcommand;
486            atcommand.push_back('a');
487            atcommand.push_back('t');
488            atcommand.push_back('+');
489            atcommand.push_back('c');
490            atcommand.push_back('m');
491            atcommand.push_back('g');
492            atcommand.push_back('d');
493            atcommand.push_back('=');
494            atcommand.push_back('1');
495            atcommand.push_back(',');
496            atcommand.push_back('3');
497    
498            writeFrame(atcommand);
499            Sleep(500);
500    }
501    UINT threadWrapper(LPVOID thread)
502    {
503            CFlisServerDlg *t = (CFlisServerDlg*) thread;
504            t->runthread();
505            return 0;
506    }
507    
508    void CFlisServerDlg::startthread()
509    {
510            AfxBeginThread(threadWrapper, (LPVOID) this);
511    }
512    
513    void CFlisServerDlg::runthread()
514    {
515            while (continueThread != 0)
516            {
517                    Reader();
518            }
519    }
520    void CFlisServerDlg::Reader()
521    {
522            if(Serial.getComstat().cbInQue > 0)
523                    {
524                            Sleep(250);
525                            std::vector<unsigned char> answer = readFrame();
526                            Sleep(500);
527                            CString tekst, oldtekst;
528                            int lol;
529                    
530                            for (int i=0; i<answer.size(); i++)
531                            {
532                                    if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
533                                    {
534                                            tekst.AppendChar(answer[i]);
535                                    }
536                            }
537                            tekst.Append(":");
538    
539                            CString command;
540                            bool plus = false;
541                                    int pos = tekst.Find('+',0);
542                                    if (pos != -1)
543                                    {
544                                            plus = true;
545                                            tekst = tekst.Right( tekst.GetLength() - pos -1);
546                                            pos = tekst.Find(':');
547                                            command = tekst.Left(pos);
548                                            tekst = tekst.Right( tekst.GetLength() - pos -1);
549                                    }
550                            
551                            
552                            if(tekst.MakeLower() == "ok")
553                            {      
554                                    AppendText("OK tekst modtaget");
555                            }
556                            else if (tekst.MakeLower() == "error")
557                            {
558                                    CString send;
559                                    send.Append("error tekst");
560                                    send.Append("\r\n");
561                                    send.Append(tekst);
562                                    AppendText(send);
563                            }
564                            else if (plus == true)
565                            {
566                                    if (command.MakeLower() == "cmti")
567                                    {
568                                            CString smscount, oldteskst;
569                                            int pos = tekst.Find(',',0);
570                                            if (pos != -1)
571                                            {
572                                                    smscount = tekst.Right( tekst.GetLength() - pos -1);
573                                                    smscount.Remove(':');
574                                                    ResetSms++;
575                                            }
576                                                    ////////////////Read sms ting//////////////////
577                                                    std::vector<unsigned char> data;
578                                                    data.push_back('a');
579                                                    data.push_back('t');
580                                                    data.push_back('+');
581                                                    data.push_back('c');
582                                                    data.push_back('m');
583                                                    data.push_back('g');
584                                                    data.push_back('r');
585                                                    data.push_back('=');
586                                                    
587                                                    for (int i=0; i< smscount.GetLength(); i++)
588                                                    {
589                                                            data.push_back(smscount[i]);
590                                                    }
591                                                    m_Textwindow.GetWindowText(oldteskst);
592                                                    oldteskst.Append("\r\n");
593                                                    for (int i=0; i<data.size();i++)
594                                                    {
595                                                            oldteskst.AppendChar(data[i]);
596                                                    }
597                                                    m_Textwindow.SetWindowText(oldteskst);
598                                                    writeFrame(data);
599                                                    Sleep(200);
600                                                    ReadSms();
601                                                    ResetSms++;
602    
603                                    }
604                                    else if(command.MakeLower() == "wind")
605                                    {
606    
607                                            CString send;
608                                            send.Append("Wind modtaget");
609                                            send.Append("\r\n");
610                                            send.Append(tekst);
611                                            AppendText(send);
612                                    }
613                            }
614                            else
615                            {
616                                    AppendText(tekst);
617                            }
618                            if(ResetSms == 20)
619                            {
620                                    DeleteSms();
621                                    AppendText("Sms'er slettet da vi nåede grænsen");
622                            }
623    
624                    }
625                    if (continueThread == 1)
626                    {
627                            
628                            CString testdata, dataframe,testprint, sIDnr, sCommandID, sInstallationsID, sImei;
629                            int commandtest = 0;
630                            int iAll = 1;
631                            std::vector<Commands> data;
632                            data = DBReadCommands();
633                            for (int i=0; i<data.size(); i++)
634                            {
635                                    sIDnr = data[i].IDnr;
636                                    sCommandID = data[i].CommandID;
637                                    commandtest = atoi(data[i].CommandID);
638                                    sInstallationsID = "0";
639    
640                                    if(commandtest > 1)
641                                    {
642                                            sInstallationsID = data[i].InstallationsID;
643                                    }
644                            }
645                            
646                            if (commandtest > 1)
647                            {
648                                    iAll = 0;
649                            }
650    
651                            if (sIDnr.GetLength() > 0)
652                            {
653                                    SendConfig(sIDnr,sCommandID,sInstallationsID);
654                            }
655                            Sleep(500);
656    
657                            CheckAcknowledges();
658                            Sleep(500);
659                    }
660                    CTime now = CTime::GetCurrentTime();
661    
662                    CTimeSpan elapsed = now-Alive.tid;
663    
664                    if (elapsed.GetTotalSeconds() >= 900)
665                    {
666                            keepaliveandread();
667                    }
668    }
669    void CFlisServerDlg::SendConfig(CString IDnr,CString CommandID,CString InstallationsID)
670    {      
671            
672            std::vector<Installation> inst;
673    
674            if (CommandID == "1")
675                    inst = DBReadPhone("0");
676            else
677                    inst = DBReadPhone(InstallationsID);
678    
679            for ( int j=0; j < inst.size(); j++)
680            {
681                    CString TlfNr, Imei, updaterate;
682                    TlfNr.Empty();
683                    Imei.Empty();
684                    updaterate.Empty();
685    
686                    CString dataen = inst[j].InstPhoneNr;
687                    TlfNr.Append(dataen);
688                    CString Imeidata = inst[j].Imei;
689                    Imei.Append(Imeidata);
690                    CString updaterat = inst[j].Updaterate;
691                    updaterate.Append(updaterat);
692            
693                    vector<unsigned char> tlfnr;
694                    for (int i=0; i<TlfNr.GetLength(); i++)
695                    {
696                            tlfnr.push_back(TlfNr[i]);
697                    }
698                    
699                    int calcimei;
700                    __int64 buf;
701    
702                    buf = atof(Imei);
703                    
704                    calcimei = tversum(buf);
705                    
706                    Imei.Format("%d",calcimei);
707                    
708                    SendSmsHead(tlfnr);
709                    Sleep(250);
710                    
711                    vector<unsigned char> smsdata;
712                    
713                    for (int i=0; i<Imei.GetLength(); i++)
714                    {
715                            smsdata.push_back(Imei[i]);
716                    }
717                    smsdata.push_back(':');
718                    for (int i=0; i<Alive.Phonenr.GetLength(); i++)
719                    {
720                            smsdata.push_back(Alive.Phonenr[i]);
721                    }
722                    smsdata.push_back(':');
723                    for (int i=0; i<updaterate.GetLength(); i++)
724                    {
725                            smsdata.push_back(updaterate[i]);
726                    }
727    
728                    SendSmsData(smsdata);
729                    Sleep(500);
730    
731                    if (IDnr != "0")
732                    {
733                            Acks.push_back( Acknowledge(inst[j].instID,TlfNr) );
734                    }
735    
736            }
737    
738            if (IDnr != "0")
739            {
740                    CString SQL, Textwindow;
741                    SQL.Format("update command set executed=now() where id=%s",IDnr);
742                    db.ExecuteSQL(SQL);
743                    AppendText("Command executed");
744            }
745            Sleep(150);
746    
747    
748    
749    
750    }
751    vector<Installation> CFlisServerDlg::DBReadPhone(CString sInstallationsID)
752    {
753            vector<Installation> buffer;
754    
755            CString SQL, phonenr, imei, updaterate, id;
756            Installation Myinst;
757    
758            if (sInstallationsID != "0")
759            {
760                    SQL.Format("select installationphonenr, imei, updaterate, id from installation WHERE id = %s", sInstallationsID);
761            }
762            else
763            {
764                    SQL.Format("select installationphonenr, imei, updaterate, id from installation");
765            }
766    
767            CRecordset rs(&db);
768            rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
769            if (rs.GetRecordCount()>0)
770            {
771                    rs.MoveFirst();
772                    while(!rs.IsEOF())
773                    {
774                    
775                            rs.GetFieldValue((short)0,phonenr);
776                            rs.GetFieldValue(1,imei);
777                            rs.GetFieldValue(2,updaterate);
778                            rs.GetFieldValue(3,id);
779    
780                            Myinst.InstPhoneNr = phonenr;
781                            Myinst.Imei = imei;
782                            Myinst.Updaterate = updaterate;
783                            Myinst.instID = id;
784    
785                            buffer.push_back(Myinst);
786                            rs.MoveNext();
787                    }
788            }
789            rs.Close();
790            return buffer;
791    }
792    int CFlisServerDlg::tversum(__int64 input)
793    {
794            int sum = 0;
795            while (input > 0)
796            {
797                    sum += (input %10);
798                    input /= 10;
799            }
800            return sum;
801    }
802    void CFlisServerDlg::OnBnClickedStart()
803    {
804    // TODO: Add your control notification handler code here
805        
806            continueThread = 1;
807            keepaliveandread();
808            Sleep(150);
809            m_Textwindow.SetWindowText(CString("Server phonenr read from db: ") + Alive.Phonenr );
810            AppendText("Started");
811            AfxBeginThread(threadWrapper,AfxGetMainWnd());
812    }
813    void CFlisServerDlg::AppendText(CString s)
814    {
815            CString Tekst;
816            m_Textwindow.GetWindowText(Tekst);
817            Tekst.Append("\r\n");
818            Tekst.Append(s);
819            m_Textwindow.SetWindowText(Tekst);
820    
821    }
822    void ConfigFile::ReadSettings()
823    {
824            ifstream file("Server-Settings.ini");
825            if (!file.is_open())
826                    throw("Could not open file");
827    
828            char buf[200];
829            while (!file.eof() ) {
830                    file.getline(buf,200);
831                    CString tmp(buf);
832    
833                    if (tmp.GetAt(0) == '#')
834                            continue;
835    
836                    int pos = tmp.Find('=');
837                    if (pos>0) {
838                            CString key = tmp.Left(pos).Trim().MakeLower();;
839                            CString value = tmp.Right(tmp.GetLength()-pos-1).Trim();
840    
841                            if (key == "host")
842                                    host = value;
843                            else if (key == "username")
844                                    username = value;
845                            else if (key == "password")
846                                    password = value;
847                            else if (key == "database")
848                                    database = value;
849                            else if (key == "comport")
850                                    comport = value;
851                    }
852    
853            }
854    
855            file.close();
856    }
857    void CFlisServerDlg::HandleAcknowledge(CString tlfnr)
858    {
859            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
860            {
861                    Acknowledge& current = (*it);
862                    if (current.sTlfNr == tlfnr)
863                    {
864                            CString SQL;
865                            SQL.Format("UPDATE installation SET commerror = false WHERE id = %s", current.sInstallationID);
866                            db.ExecuteSQL(SQL);
867    
868                            Acks.erase(it);
869    
870                            return;
871                    }
872            }
873  }  }
874    
875    void CFlisServerDlg::CheckAcknowledges()
876    {
877            CTime now = CTime::GetCurrentTime();
878            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
879            {
880                    Acknowledge& current = (*it);
881    
882                    CTimeSpan elapsed = now-current.cTime;
883    
884                    if (elapsed.GetTotalSeconds() >= 300)
885                    {
886                            DumpAckList();
887                            if (current.iRetry >= 1)
888                            {
889                                    CString SQL;
890                                    SQL.Format("UPDATE installation SET commerror = true WHERE id = %s", current.sInstallationID);
891                                    db.ExecuteSQL(SQL);
892                                    Acks.erase(it);
893                                    return; // the iterator is now invalidated, but the thread loop will make sure we are here soon again
894                            }
895                            else
896                            {
897                                    SendConfig("0","2",current.sInstallationID);
898                                    current.iRetry++;
899                                    current.cTime = CTime::GetCurrentTime();
900                                    AppendText( CString("Retry send config to ") + current.sTlfNr );
901                            }
902                    }
903            }
904    }
905    
906    void CFlisServerDlg::DumpAckList()
907    {
908            CTime now = CTime::GetCurrentTime();
909            OutputDebugString("-------------------------------\n");
910            int count = 0;
911            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
912            {
913                    CString msg;
914                    msg.Format("%d:%d:%d> %4d : %s\n", now.GetHour(), now.GetMinute(), now.GetSecond(), count, (*it).sTlfNr);
915                    OutputDebugString(msg);
916                    count++;
917            }
918    }
919    vector<keepalive> CFlisServerDlg::keepaliveandread(void)
920    {
921            vector<keepalive> buffer;
922    
923            CString SQL, name, value;
924            SQL = "select name, value from config;";
925            CRecordset rs(&db);
926            rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
927            if (rs.GetRecordCount()>0)
928            {
929                    rs.MoveFirst();
930                            
931                    rs.GetFieldValue((short)0, name);
932                    rs.GetFieldValue(1,value);
933                    
934                    Alive.name = name;
935                    Alive.value = value;
936                    Alive.tid = CTime::GetCurrentTime();
937                    if(Alive.name == "phonenr")
938                    {
939                            Alive.Phonenr = value;
940                    }
941    
942                    buffer.push_back(Alive);
943                    rs.MoveNext();
944    
945            }
946            rs.Close();
947            return buffer;
948            
949    }

Legend:
Removed from v.105  
changed lines
  Added in v.144

  ViewVC Help
Powered by ViewVC 1.1.20