/[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 132 by kevin, Mon Dec 3 11:46:03 2007 UTC revision 166 by kevin, Wed Dec 5 16:03:05 2007 UTC
# Line 6  Line 6 
6  #include "FlisServerDlg.h"  #include "FlisServerDlg.h"
7  #include <vector>  #include <vector>
8  #include ".\flisserverdlg.h"  #include ".\flisserverdlg.h"
9    #include <atlrx.h>
10    
11  #ifdef _DEBUG  #ifdef _DEBUG
12  #define new DEBUG_NEW  #define new DEBUG_NEW
# Line 63  BEGIN_MESSAGE_MAP(CFlisServerDlg, CDialo Line 64  BEGIN_MESSAGE_MAP(CFlisServerDlg, CDialo
64          ON_WM_SYSCOMMAND()          ON_WM_SYSCOMMAND()
65          ON_WM_PAINT()          ON_WM_PAINT()
66          ON_WM_QUERYDRAGICON()          ON_WM_QUERYDRAGICON()
         ON_MESSAGE(UWM_MYMESSAGE, OnShowString)  
67          //}}AFX_MSG_MAP          //}}AFX_MSG_MAP
68          ON_BN_CLICKED(IDCLOSE, OnBnClickedClose)          ON_BN_CLICKED(IDCLOSE, OnBnClickedClose)
69          ON_BN_CLICKED(IDC_GSMPIN, OnBnClickedGsmpin)          ON_BN_CLICKED(IDC_GSMPIN, OnBnClickedGsmpin)
# Line 158  HCURSOR CFlisServerDlg::OnQueryDragIcon( Line 158  HCURSOR CFlisServerDlg::OnQueryDragIcon(
158  }  }
159  int CFlisServerDlg::StartSerial(void)  int CFlisServerDlg::StartSerial(void)
160  {  {
161            
162          int Baud;          int Baud;
         CString SerialPort = "COM3";  
163    
164            ConfigFile config;
165            try {
166                    config.ReadSettings();
167            } catch(...) {
168                    MessageBox("Could not open config file");
169                    OnOK();
170                    return true;
171            }
172            
173          Baud = 1200;          Baud = 1200;
174          if( Serial.isOpen() )          if( Serial.isOpen() )
175          {          {
176                  Serial.close();                  try
177                  Serial.open( SerialPort, Baud );                  {
178                            Serial.close();
179                            Serial.open( config.comport, Baud );
180                    }
181                    catch (exception* e)
182                    {
183                            MessageBox( "Serial.open() exception" );
184                            return 0;
185                    }
186          }          }
187          else          else
188          {          {
189                  Serial.open( SerialPort, Baud );                  try
190                    {
191                            Serial.open( config.comport, Baud );
192                    }
193                    catch (exception* e)
194                    {
195                            MessageBox( "Serial.open() exception 2" );
196                            return 0;
197                    }
198          }          }
199            
200                                    
201  return 0;  return 0;
202  }  }
# Line 232  void CFlisServerDlg::SendSmsData(std::ve Line 257  void CFlisServerDlg::SendSmsData(std::ve
257                  CString tekst;                  CString tekst;
258                  std::vector<unsigned char> answer = readFrame();                  std::vector<unsigned char> answer = readFrame();
259                  Sleep(50);                  Sleep(50);
260                          char array1[150];  
261                          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++)  
262                          {                          {
263                                  if ((array1[i] != 0x0A) && (array1[i] != 0x0D))                                  if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
264                                  {                                  {
265                                          tekst.AppendChar(array1[i]);                                          tekst.AppendChar(answer[i]);
266                                  }                                  }
267                          }                          }
268                          m_Textwindow.SetWindowText(tekst);                          AppendText(tekst);
269          }          }
270    
271  }  }
272  void CFlisServerDlg::SendSmsHead(std::vector<unsigned char> data)  void CFlisServerDlg::SendSmsHead(std::vector<unsigned char> tlfnr)
273  {  {
274          vector<unsigned char> atcommand;          vector<unsigned char> atcommand;
275          atcommand.push_back('a');          atcommand.push_back('a');
# Line 270  void CFlisServerDlg::SendSmsHead(std::ve Line 289  void CFlisServerDlg::SendSmsHead(std::ve
289                  Sleep(5);                  Sleep(5);
290          }          }
291                    
292          for (int i=0; i<data.size(); i++)          for (int i=0; i<tlfnr.size(); i++)
293          {          {
294                  Serial.writeByte( data[i] );                  Serial.writeByte( tlfnr[i] );
295                  Sleep(5);                  Sleep(5);
296          }          }
297          Serial.writeByte(atcommand[s]);          Serial.writeByte(atcommand[s]);
# Line 282  void CFlisServerDlg::SendSmsHead(std::ve Line 301  void CFlisServerDlg::SendSmsHead(std::ve
301  void CFlisServerDlg::DBConnect()  void CFlisServerDlg::DBConnect()
302  {  {
303          CString dsn;          CString dsn;
304          //dsn.Format("ODBC;Description=asd;DRIVER=PostgreSQL ANSI;SERVER=t-hoerup.dk; uid=serrenab;password=furnacemonitor;database=flisfyr;sslmode=prefer");   //Torben          ConfigFile config;
305          dsn.Format("ODBC;Description=asd;DRIVER=PostgreSQL ANSI;SERVER=192.168.134.132; uid=serrenab;password=furnacemonitor;database=flisfyr;sslmode=prefer");   //skole server          try {
306                    config.ReadSettings();
307            } catch(...) {
308                    MessageBox("Could not open config file");
309            }
310            
311            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);
312          db.OpenEx(dsn, CDatabase::noOdbcDialog);          db.OpenEx(dsn, CDatabase::noOdbcDialog);
313  }  }
314  vector<Commands> CFlisServerDlg::DBRead(void)  vector<Commands> CFlisServerDlg::DBReadCommands(void)
315  {  {
316          vector<Commands> buffer;          vector<Commands> buffer;
317    
318          CString SQL, IDnr, CommandID, InstallationsID;          CString SQL, IDnr, CommandID, InstallationsID;
319          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;";
320          CRecordset rs(&db);          CRecordset rs(&db);
321          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
322          if (rs.GetRecordCount()>0)          if (rs.GetRecordCount()>0)
323          {          {
324                  rs.MoveFirst();                  rs.MoveFirst();
                 while(!rs.IsEOF())  
                 {  
                         Commands Mycom;  
                         rs.GetFieldValue((short)0, IDnr);  
                         rs.GetFieldValue(3, CommandID);  
                         rs.GetFieldValue(4, InstallationsID);  
325                                                    
326                          Mycom.IDnr = IDnr;                  Commands Mycom;
327                          Mycom.CommandID = CommandID;                  rs.GetFieldValue((short)0, IDnr);
328                          Mycom.InstallationsID = InstallationsID;                  rs.GetFieldValue(3, CommandID);
329                    rs.GetFieldValue(4, InstallationsID);
330                    
331                    Mycom.IDnr = IDnr;
332                    Mycom.CommandID = CommandID;
333                    Mycom.InstallationsID = InstallationsID;
334    
335                    buffer.push_back(Mycom);
336                    rs.MoveNext();
337    
                         buffer.push_back(Mycom);  
                         rs.MoveNext();  
                 }  
338          }          }
339          rs.Close();          rs.Close();
340          return buffer;          return buffer;
# Line 318  vector<Commands> CFlisServerDlg::DBRead( Line 342  vector<Commands> CFlisServerDlg::DBRead(
342  void CFlisServerDlg::ReadSms()  void CFlisServerDlg::ReadSms()
343  {  {
344          CString tekst, oldtekst;          CString tekst, oldtekst;
345          Sleep(950);          Sleep(950);             //Holder en pause for at lade hele sms'en komme ind i serial køen.
346          if(Serial.getComstat().cbInQue > 0)          if(Serial.getComstat().cbInQue > 0)
347          {          {
348                  std::vector<unsigned char> answer = readFrame();                  std::vector<unsigned char> answer = readFrame();
349                  Sleep(50);                  Sleep(50);
350                          char array1[250];  
                         int i;  
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 array1[i] = answer[i];  
                         }  
                   
351                          for (int i=0; i<answer.size(); i++)                          for (int i=0; i<answer.size(); i++)
352                          {                          {
353                                  if ((array1[i] != 0x0A) && (array1[i] != 0x0D))                                  if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
354                                  {                                  {
355                                          tekst.AppendChar(array1[i]);                                          tekst.AppendChar(answer[i]);
356                                  }                                  }
357                          }                          }
358    
359                          m_Textwindow.GetWindowText(oldtekst);                          AppendText(tekst);
                         oldtekst.Append("\r\n");  
                         oldtekst.Append(tekst);  
                         m_Textwindow.SetWindowText(oldtekst);  
360                          SmsSplit(tekst);                          SmsSplit(tekst);
361          }          }
362  }  }
# Line 350  void CFlisServerDlg::SmsSplit(CString da Line 365  void CFlisServerDlg::SmsSplit(CString da
365          CString FyrData, TlfNr, SmsCount, Temper, Flamme, Flis, FremFejl, PowerFail, oldtekst;          CString FyrData, TlfNr, SmsCount, Temper, Flamme, Flis, FremFejl, PowerFail, oldtekst;
366          char CharData[150];          char CharData[150];
367          strcpy(CharData,data);          strcpy(CharData,data);
368            TlfNr = data.Mid(24,8);
369            FyrData = data.Mid(57,data.GetLength()-59);
370            FyrData.Append(":");
371    
372          int s=24;          if (FyrData.MakeLower() == "conf ok:")
         for (int i=0; i<=7; i++)  
373          {          {
374                  TlfNr.AppendChar(CharData[s]);                  HandleAcknowledge(TlfNr);
375                  s++;                  return;
376          }          }
377            CAtlRegExp<> regex;
378            if (regex.Parse("^{[0-9]+}:{[0-9]+}:[0-1]:[0-1]:[0-1]:[0-1]:$") == REPARSE_ERROR_OK)
379            {
380    
381                    CAtlREMatchContext<> pContext;
382    
383          for (int s=57; s<=(data.GetLength()-3); s++)                  if (!regex.Match(FyrData, &pContext))
384                    {
385                            AppendText("Invalid SMS recieved");
386                            return;
387                    }
388            }
389            else
390          {          {
391                  FyrData.AppendChar(CharData[s]);                  AppendText("Regex PARSE error!!!"); //Burde aldrig kunne ske !
392          }          }
393          FyrData.Append(":");  
           
394          SmsCount = Splitter(FyrData);          SmsCount = Splitter(FyrData);
395          Temper = Splitter(FyrData);          Temper = Splitter(FyrData);
396          Flamme = Splitter(FyrData);          Flamme = Splitter(FyrData);
# Line 384  void CFlisServerDlg::SmsSplit(CString da Line 411  void CFlisServerDlg::SmsSplit(CString da
411                  rs.Close();                  rs.Close();
412    
413                  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);                  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);
414                    try
415                    {
416                  db.ExecuteSQL(SQL);                  db.ExecuteSQL(SQL);
417                    }
418                  m_Textwindow.GetWindowText(Textwindow);                  catch(CDBException* e)
419                  Textwindow.Append("\r\n");                  {
420                  Textwindow.Append("Sms added to Log");                          MessageBox(e->m_strError);
421                  m_Textwindow.SetWindowText(Textwindow);                  }
422                    AppendText("Sms added to Log");
423                  Sleep(150);                  Sleep(150);
   
 ///////////////////////////////////////////////////////////////////////////////////////////////////////  
 ///////////////////// Her skal sendes data til databasen //////////////////////////////////////////////  
424  }  }
425  CString CFlisServerDlg::Splitter(CString& fyrdata)  CString CFlisServerDlg::Splitter(CString& fyrdata)
426  {  {
# Line 411  void CFlisServerDlg::OnBnClickedClose() Line 438  void CFlisServerDlg::OnBnClickedClose()
438  {  {
439          // TODO: Add your control notification handler code here          // TODO: Add your control notification handler code here
440          continueThread = 0;          continueThread = 0;
441            Sleep(250);
442          DeleteSms();          DeleteSms();
443    
444          Sleep(500);          Sleep(500);
# Line 431  void CFlisServerDlg::OnBnClickedClose() Line 459  void CFlisServerDlg::OnBnClickedClose()
459  void CFlisServerDlg::OnBnClickedGsmpin()  void CFlisServerDlg::OnBnClickedGsmpin()
460  {  {
461          // TODO: Add your control notification handler code here          // TODO: Add your control notification handler code here
462          m_Textwindow.SetWindowText("Indsætter Pinkode, efterfuldt af 60sec pause");          bool ready = true;
463            m_Textwindow.SetWindowText("Indsætter Pinkode, og venter på modem bliver klar");
464          UpdateWindow();          UpdateWindow();
465          SetPin();          SetPin();
466          Sleep(50000);          Sleep(500);
467    
468          while (Serial.getComstat().cbInQue > 0)          while (ready == true)
469            {
470                    if (Serial.getComstat().cbInQue > 120)
471                    {
472                            std::vector<unsigned char> answer = readFrame();
473                            CString tekst;
474                    
475                            for (int i=0; i<answer.size(); i++)
476                            {
477                                    if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
478                                    {
479                                            tekst.AppendChar(answer[i]);
480                                    }
481                            }
482                            int n = tekst.Find("WIND: 11",0);
483                            if (n > -1)
484                            {
485                                    ready = false;
486                            }
487                            else
488                            {
489                                    AppendText(tekst);
490                            }
491                    }
492                    Sleep(10); //Small delay to avoid busy wait
493            }
494            Sleep(100); //Give the modem a chance to send the last data
495            while(Serial.getComstat().cbInQue > 0)
496          {          {
497                  Serial.readByte(); //Flush the incoming queue                  Serial.readByte(); //Flush the incoming queue
498                    Sleep(1);
499          }          }
   
500          OnBnClickedStart();          OnBnClickedStart();
501  }  }
502  void CFlisServerDlg::DeleteSms()  void CFlisServerDlg::DeleteSms()
# Line 461  void CFlisServerDlg::DeleteSms() Line 517  void CFlisServerDlg::DeleteSms()
517          writeFrame(atcommand);          writeFrame(atcommand);
518          Sleep(500);          Sleep(500);
519  }  }
520  LRESULT CFlisServerDlg::OnShowString(WPARAM wParam, LPARAM lParam)  UINT threadWrapper(LPVOID thread)
 {  
         CString *s = (CString*) lParam;  
         GetDlgItem(IDC_Textwindow)->SetWindowText(*s);  
   
         delete s;  
         return 0;  
   
 }UINT threadWrapper(LPVOID thread)  
521  {  {
522          CFlisServerDlg *t = (CFlisServerDlg*) thread;          CFlisServerDlg *t = (CFlisServerDlg*) thread;
523          t->runthread();          t->runthread();
# Line 497  void CFlisServerDlg::Reader() Line 545  void CFlisServerDlg::Reader()
545                          Sleep(500);                          Sleep(500);
546                          CString tekst, oldtekst;                          CString tekst, oldtekst;
547                          int lol;                          int lol;
                         char array1[250];  
                         int i;  
                         for (int i=0; i<answer.size(); i++)  
                         {  
                                 array1[i] = answer[i];  
                         }  
548                                    
549                          for (int i=0; i<answer.size(); i++)                          for (int i=0; i<answer.size(); i++)
550                          {                          {
551                                  if ((array1[i] != 0x0A) && (array1[i] != 0x0D))                                  if ((answer[i] != 0x0A) && (answer[i] != 0x0D))
552                                  {                                  {
553                                          tekst.AppendChar(array1[i]);                                          tekst.AppendChar(answer[i]);
554                                  }                                  }
555                          }                          }
556                          tekst.Append(":");                          tekst.Append(":");
557    
558                          CString command;                          CString command;
559                          bool plus;                          bool plus = false;
560                                  int pos = tekst.Find('+',0);                                  int pos = tekst.Find('+',0);
561                                  if (pos != -1)                                  if (pos != -1)
562                                  {                                  {
# Line 526  void CFlisServerDlg::Reader() Line 568  void CFlisServerDlg::Reader()
568                                  }                                  }
569                                                    
570                                                    
571                          if(tekst == "OK")                          if(tekst.MakeLower() == "ok")
572                          {                                {      
573                                  m_Textwindow.GetWindowText(oldtekst);                                  AppendText("OK tekst modtaget");
574                                  oldtekst.Append("\r\n");                          }
575                                  oldtekst.Append("OK tekst modtaget");                          else if (tekst.MakeLower() == "error")
576                                  m_Textwindow.SetWindowText(oldtekst);                          {
577                          }                                  CString send;
578                          else if (tekst == "error")                                  send.Append("error tekst");
579                          {                                  send.Append("\r\n");
580                                  m_Textwindow.GetWindowText(oldtekst);                                  send.Append(tekst);
581                                  oldtekst.Append("\r\n");                                  AppendText(send);
                                 oldtekst.Append("error tekst");  
                                 oldtekst.Append(tekst);  
                                 m_Textwindow.SetWindowText(oldtekst);  
582                          }                          }
583                          else if (plus = true)                          else if (plus == true)
584                          {                          {
585                                  if (command = "cmti")                                  if (command.MakeLower() == "cmti")
586                                  {                                  {
587                                          CString smscount, oldteskst;                                          CString smscount, oldteskst;
588                                          int pos = tekst.Find(',',0);                                          int pos = tekst.Find(',',0);
# Line 581  void CFlisServerDlg::Reader() Line 620  void CFlisServerDlg::Reader()
620                                                  ResetSms++;                                                  ResetSms++;
621    
622                                  }                                  }
623                                  else if(command = "wind")                                  else if(command.MakeLower() == "wind")
624                                  {                                  {
625                                          m_Textwindow.GetWindowText(oldtekst);  
626                                          oldtekst.Append("\r\n");                                          CString send;
627                                          oldtekst.Append("Først lidt tekst på næste linie\r\n");                                          send.Append("Wind modtaget");
628                                          oldtekst.Append(tekst);                                          send.Append("\r\n");
629                                          m_Textwindow.SetWindowText(oldtekst);                                          send.Append(tekst);
630                                            AppendText(send);
631                                  }                                  }
632                          }                          }
633                          else                          else
634                          {                          {
635                                  m_Textwindow.GetWindowText(oldtekst);                                  AppendText(tekst);
                                 oldtekst.Append("\r\n");  
                                 oldtekst.Append("Anden tekst end forventet");  
                                 oldtekst.Append("\r\n");  
                                 oldtekst.Append(tekst);  
                                 m_Textwindow.SetWindowText(oldtekst);  
636                          }                          }
637                          if(ResetSms == 20)                          if(ResetSms == 20)
638                          {                          {
639                                  DeleteSms();                                  DeleteSms();
640                                  m_Textwindow.GetWindowText(oldtekst);                                  AppendText("Sms'er slettet da vi nåede grænsen");
                                 oldtekst.Append("\r\n");  
                                 oldtekst.Append("Slettet Sendte og læste beskeder da vi nåede grænsen.");  
                                 m_Textwindow.SetWindowText(oldtekst);  
641                          }                          }
642    
643                  }                  }
644                  if (continueThread = 1)                  if (continueThread == 1)
645                  {                  {
646                                                    
647                          CString testdata, dataframe,testprint, sIDnr, sCommandID, sInstallationsID, sImei;                          CString testdata, dataframe,testprint, sIDnr, sCommandID, sInstallationsID, sImei;
648                          int commandtest = 0;                          int commandtest = 0;
649                          int iAll = 1;                          int iAll = 1;
650                          std::vector<Commands> data;                          std::vector<Commands> data;
651                          data = DBRead();                          data = DBReadCommands();
652                          for (int i=0; i<data.size(); i++)                          for (int i=0; i<data.size(); i++)
653                          {                          {
654                                  testdata.Append(data[i].IDnr);                                  sIDnr = data[i].IDnr;
655                                  testdata.Append(":");                                  sCommandID = data[i].CommandID;
                                 testdata.Append(data[i].CommandID);  
                                 testdata.Append(":");  
656                                  commandtest = atoi(data[i].CommandID);                                  commandtest = atoi(data[i].CommandID);
657                                    sInstallationsID = "0";
658    
659                                  if(commandtest > 1)                                  if(commandtest > 1)
660                                  {                                  {
661                                          testdata.Append(data[i].InstallationsID);                                          sInstallationsID = data[i].InstallationsID;
                                         testdata.Append(":");  
662                                  }                                  }
663                          }                          }
664                          sIDnr = Splitter(testdata);                          
                         sCommandID = Splitter(testdata);  
                         sInstallationsID = "0";  
665                          if (commandtest > 1)                          if (commandtest > 1)
666                          {                          {
                                 sInstallationsID = Splitter(testdata);  
667                                  iAll = 0;                                  iAll = 0;
668                          }                          }
669    
670                          if (sIDnr.GetLength() > 0)                          if (sIDnr.GetLength() > 0)
671                          {                          {
672                                  DBReadData(sIDnr,sCommandID,sInstallationsID);                                  SendConfig(sIDnr,sCommandID,sInstallationsID);
673                          }                          }
674                          Sleep(500);                          Sleep(500);
675    
676                            CheckAcknowledges();
677                            Sleep(500);
678                    }
679                    CTime now = CTime::GetCurrentTime();
680    
681                    CTimeSpan elapsed = now-Alive.tid;
682    
683                    if (elapsed.GetTotalSeconds() >= 900)
684                    {
685                            keepaliveandread();
686                  }                  }
687  }  }
688  void CFlisServerDlg::DBReadData(CString IDnr,CString CommandID,CString InstallationsID)  void CFlisServerDlg::SendConfig(CString IDnr,CString CommandID,CString InstallationsID)
689  {  {      
         CString ServerTlfNr;  
         int i = 0;  
         ServerTlfNr = "29860132";  
                   
690                    
691          std::vector<Installation> inst;          std::vector<Installation> inst;
692          inst = DBReadPhone(InstallationsID);  
693          while (i < inst.size())          if (CommandID == "1")
694                    inst = DBReadPhone("0");
695            else
696                    inst = DBReadPhone(InstallationsID);
697    
698            for ( int j=0; j < inst.size(); j++)
699          {          {
700                  CString TlfNr, Imei, updaterate;                  CString TlfNr, Imei, updaterate;
701                  TlfNr.Empty();                  TlfNr.Empty();
702                  Imei.Empty();                  Imei.Empty();
703                  updaterate.Empty();                  updaterate.Empty();
704    
705                  CString dataen = inst[i].InstPhoneNr;                  CString dataen = inst[j].InstPhoneNr;
706                  TlfNr.Append(dataen);                  TlfNr.Append(dataen);
707                  CString Imeidata = inst[i].Imei;                  CString Imeidata = inst[j].Imei;
708                  Imei.Append(Imeidata);                  Imei.Append(Imeidata);
709                  CString updaterat = inst[i].Updaterate;                  CString updaterat = inst[j].Updaterate;
710                  updaterate.Append(updaterat);                  updaterate.Append(updaterat);
                 i++;  
           
         vector<unsigned char> tlfnr;  
         for (int i=0; i<TlfNr.GetLength(); i++)  
         {  
                 tlfnr.push_back(TlfNr[i]);  
         }  
711                    
712          int calcimei;                  vector<unsigned char> tlfnr;
713          __int64 buf;                  for (int i=0; i<TlfNr.GetLength(); i++)
714                    {
715                            tlfnr.push_back(TlfNr[i]);
716                    }
717                    
718                    int calcimei;
719                    __int64 buf;
720    
721          buf = atof(Imei);                  buf = atof(Imei);
722                            
723          calcimei = tversum(buf);                  calcimei = tversum(buf);
724                            
725          Imei.Format("%d",calcimei);                  Imei.Format("%d",calcimei);
726                            
727          SendSmsHead(tlfnr);                  SendSmsHead(tlfnr);
728          Sleep(250);                  Sleep(250);
729                            
730          vector<unsigned char> smsdata;                  vector<unsigned char> smsdata;
731                            
732          for (int i=0; i<Imei.GetLength(); i++)                  for (int i=0; i<Imei.GetLength(); i++)
733          {                  {
734                  smsdata.push_back(Imei[i]);                          smsdata.push_back(Imei[i]);
735          }                  }
736          smsdata.push_back(':');                  smsdata.push_back(':');
737          for (int i=0; i<ServerTlfNr.GetLength(); i++)                  for (int i=0; i<Alive.Phonenr.GetLength(); i++)
738          {                  {
739                  smsdata.push_back(ServerTlfNr[i]);                          smsdata.push_back(Alive.Phonenr[i]);
740          }                  }
741          smsdata.push_back(':');                  smsdata.push_back(':');
742          for (int i=0; i<updaterate.GetLength(); i++)                  for (int i=0; i<updaterate.GetLength(); i++)
743          {                  {
744                  smsdata.push_back(updaterate[i]);                          smsdata.push_back(updaterate[i]);
745          }                  }
746    
747                    SendSmsData(smsdata);
748                    Sleep(500);
749    
750                    if (IDnr != "0")
751                    {
752                            Acks.push_back( Acknowledge(inst[j].instID,TlfNr) );
753                    }
754    
         SendSmsData(smsdata);  
         Sleep(500);  
           
755          }          }
756    
757            if (IDnr != "0")
758            {
759                  CString SQL, Textwindow;                  CString SQL, Textwindow;
760                  SQL.Format("update command set executed=now() where id=%s",IDnr);                  SQL.Format("update command set executed=now() where id=%s",IDnr);
761                  db.ExecuteSQL(SQL);                  db.ExecuteSQL(SQL);
762                  m_Textwindow.GetWindowText(Textwindow);                  Sleep(100);
763                  Textwindow.Append("\r\n");                  AppendText("Command executed");
764                  Textwindow.Append("Command executed");          }
765                  m_Textwindow.SetWindowText(Textwindow);          Sleep(150);
766                  Sleep(150);  
767    
768    
769    
770  }  }
771  vector<Installation> CFlisServerDlg::DBReadPhone(CString sInstallationsID)  vector<Installation> CFlisServerDlg::DBReadPhone(CString sInstallationsID)
772  {  {
773          vector<Installation> buffer;          vector<Installation> buffer;
774    
775          CString SQL, phonenr, imei, updaterate;          CString SQL, phonenr, imei, updaterate, id;
         int installernull;  
776          Installation Myinst;          Installation Myinst;
777          installernull = atoi(sInstallationsID);  
778          if (installernull > 1)          if (sInstallationsID != "0")
779          {          {
780                  SQL.Format("select installationphonenr, imei, updaterate from installation WHERE id = %s", sInstallationsID);                  SQL.Format("select installationphonenr, imei, updaterate, id from installation WHERE id = %s", sInstallationsID);
781          }          }
782          else if(installernull < 2)          else
783          {          {
784                  SQL.Format("select installationphonenr, imei, updaterate from installation");                  SQL.Format("select installationphonenr, imei, updaterate, id from installation");
785          }          }
786    
787          CRecordset rs(&db);          CRecordset rs(&db);
788          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
789          if (rs.GetRecordCount()>0)          if (rs.GetRecordCount()>0)
# Line 747  vector<Installation> CFlisServerDlg::DBR Line 795  vector<Installation> CFlisServerDlg::DBR
795                          rs.GetFieldValue((short)0,phonenr);                          rs.GetFieldValue((short)0,phonenr);
796                          rs.GetFieldValue(1,imei);                          rs.GetFieldValue(1,imei);
797                          rs.GetFieldValue(2,updaterate);                          rs.GetFieldValue(2,updaterate);
798                            rs.GetFieldValue(3,id);
799    
800                          Myinst.InstPhoneNr = phonenr;                          Myinst.InstPhoneNr = phonenr;
801                          Myinst.Imei = imei;                          Myinst.Imei = imei;
802                          Myinst.Updaterate = updaterate;                          Myinst.Updaterate = updaterate;
803                            Myinst.instID = id;
804    
805                          buffer.push_back(Myinst);                          buffer.push_back(Myinst);
806                          rs.MoveNext();                          rs.MoveNext();
# Line 772  int CFlisServerDlg::tversum(__int64 inpu Line 822  int CFlisServerDlg::tversum(__int64 inpu
822  void CFlisServerDlg::OnBnClickedStart()  void CFlisServerDlg::OnBnClickedStart()
823  {  {
824  // TODO: Add your control notification handler code here  // TODO: Add your control notification handler code here
825        
826          continueThread = 1;          continueThread = 1;
827          m_Textwindow.SetWindowText("Started");          keepaliveandread();
828            Sleep(150);
829            m_Textwindow.SetWindowText(CString("Server phonenr read from db: ") + Alive.Phonenr );
830            AppendText("Started");
831          AfxBeginThread(threadWrapper,AfxGetMainWnd());          AfxBeginThread(threadWrapper,AfxGetMainWnd());
832  }  }
833    void CFlisServerDlg::AppendText(CString s)
834    {
835            CString Tekst;
836            m_Textwindow.GetWindowText(Tekst);
837            Tekst.Append("\r\n");
838            Tekst.Append(s);
839            m_Textwindow.SetWindowText(Tekst);
840    
841    }
842    void ConfigFile::ReadSettings()
843    {
844            ifstream file("Server-Settings.ini");
845            if (!file.is_open())
846                    throw("Could not open file");
847    
848            char buf[200];
849            while (!file.eof() ) {
850                    file.getline(buf,200);
851                    CString tmp(buf);
852    
853                    if (tmp.GetAt(0) == '#')
854                            continue;
855    
856                    int pos = tmp.Find('=');
857                    if (pos>0) {
858                            CString key = tmp.Left(pos).Trim().MakeLower();;
859                            CString value = tmp.Right(tmp.GetLength()-pos-1).Trim();
860    
861                            if (key == "host")
862                                    host = value;
863                            else if (key == "username")
864                                    username = value;
865                            else if (key == "password")
866                                    password = value;
867                            else if (key == "database")
868                                    database = value;
869                            else if (key == "comport")
870                                    comport = value;
871                    }
872    
873            }
874    
875            file.close();
876    }
877    void CFlisServerDlg::HandleAcknowledge(CString tlfnr)
878    {
879            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
880            {
881                    Acknowledge& current = (*it);
882                    if (current.sTlfNr == tlfnr)
883                    {
884                            CString SQL;
885                            SQL.Format("UPDATE installation SET commerror = false WHERE id = %s", current.sInstallationID);
886                            db.ExecuteSQL(SQL);
887    
888                            Acks.erase(it);
889    
890                            return;
891                    }
892            }
893    }
894    
895    void CFlisServerDlg::CheckAcknowledges()
896    {
897            CTime now = CTime::GetCurrentTime();
898            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
899            {
900                    Acknowledge& current = (*it);
901    
902                    CTimeSpan elapsed = now-current.cTime;
903    
904                    if (elapsed.GetTotalSeconds() >= 300)
905                    {
906                            DumpAckList();
907                            if (current.iRetry >= 1)
908                            {
909                                    CString SQL;
910                                    SQL.Format("UPDATE installation SET commerror = true WHERE id = %s", current.sInstallationID);
911                                    db.ExecuteSQL(SQL);
912                                    Acks.erase(it);
913                                    return; // the iterator is now invalidated, but the thread loop will make sure we are here soon again
914                            }
915                            else
916                            {
917                                    SendConfig("0","2",current.sInstallationID);
918                                    current.iRetry++;
919                                    current.cTime = CTime::GetCurrentTime();
920                                    AppendText( CString("Retry send config to ") + current.sTlfNr );
921                            }
922                    }
923            }
924    }
925    
926    void CFlisServerDlg::DumpAckList()
927    {
928            CTime now = CTime::GetCurrentTime();
929            OutputDebugString("-------------------------------\n");
930            int count = 0;
931            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
932            {
933                    CString msg;
934                    msg.Format("%d:%d:%d> %4d : %s\n", now.GetHour(), now.GetMinute(), now.GetSecond(), count, (*it).sTlfNr);
935                    OutputDebugString(msg);
936                    count++;
937            }
938    }
939    vector<keepalive> CFlisServerDlg::keepaliveandread(void)
940    {
941            vector<keepalive> buffer;
942    
943            CString SQL, name, value;
944            SQL = "select name, value from config;";
945            CRecordset rs(&db);
946            try
947            {
948                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
949                    if (rs.GetRecordCount()>0)
950                    {
951                            rs.MoveFirst();
952                            
953                            rs.GetFieldValue((short)0, name);
954                            rs.GetFieldValue(1,value);
955                    
956                            Alive.name = name;
957                            Alive.value = value;
958                            Alive.tid = CTime::GetCurrentTime();
959                            if(Alive.name == "phonenr")
960                            {
961                                    Alive.Phonenr = value;
962                            }
963    
964                            buffer.push_back(Alive);
965                            rs.MoveNext();
966    
967                    }
968                    rs.Close();
969                    return buffer;
970            }
971            catch (char * str)
972            {
973                    AppendText("Keepalive failed, closing and opening the db connection again");
974                    if(db.IsOpen())
975                    {
976                            db.Close();
977                            AppendText("DB connection closed");
978                    }
979                    if(!db.IsOpen())
980                    {
981                            DBConnect();
982                            AppendText("DB connection started again");
983                    }
984            }
985    
986            
987    }

Legend:
Removed from v.132  
changed lines
  Added in v.166

  ViewVC Help
Powered by ViewVC 1.1.20