/[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 136 by kevin, Mon Dec 3 14:13:20 2007 UTC revision 158 by kevin, Wed Dec 5 11:54:09 2007 UTC
# Line 345  void CFlisServerDlg::ReadSms() Line 345  void CFlisServerDlg::ReadSms()
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    
350                          for (int i=0; i<answer.size(); i++)                          for (int i=0; i<answer.size(); i++)
351                          {                          {
# Line 365  void CFlisServerDlg::SmsSplit(CString da Line 365  void CFlisServerDlg::SmsSplit(CString da
365          char CharData[150];          char CharData[150];
366          strcpy(CharData,data);          strcpy(CharData,data);
367          TlfNr = data.Mid(24,8);          TlfNr = data.Mid(24,8);
368          FyrData = data.Mid(57,data.GetLength()-3);          FyrData = data.Mid(57,data.GetLength()-59);
369          FyrData.Append(":");          FyrData.Append(":");
370    
371            if (FyrData.MakeLower() == "conf ok:")
372            {
373                    HandleAcknowledge(TlfNr);
374                    return;
375            }
376                    
377          SmsCount = Splitter(FyrData);          SmsCount = Splitter(FyrData);
378          Temper = Splitter(FyrData);          Temper = Splitter(FyrData);
# Line 388  void CFlisServerDlg::SmsSplit(CString da Line 394  void CFlisServerDlg::SmsSplit(CString da
394                  rs.Close();                  rs.Close();
395    
396                  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);
397                    try
398                    {
399                  db.ExecuteSQL(SQL);                  db.ExecuteSQL(SQL);
400                    }
401                    catch(CDBException* e)
402                    {
403                            MessageBox(e->m_strError);
404                    }
405                  AppendText("Sms added to Log");                  AppendText("Sms added to Log");
406                  Sleep(150);                  Sleep(150);
407  }  }
# Line 429  void CFlisServerDlg::OnBnClickedClose() Line 441  void CFlisServerDlg::OnBnClickedClose()
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          m_Textwindow.SetWindowText("Indsætter Pinkode, efterfuldt af 60sec pause");          bool ready = true;
445            m_Textwindow.SetWindowText("Indsætter Pinkode, og venter på modem bliver klar");
446          UpdateWindow();          UpdateWindow();
447          SetPin();          SetPin();
448          Sleep(50000);          Sleep(500);
449    
450          while (Serial.getComstat().cbInQue > 0)          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                    Sleep(10); //Small delay to avoid busy wait
475            }
476            Sleep(100); //Give the modem a chance to send the last data
477            while(Serial.getComstat().cbInQue > 0)
478          {          {
479                  Serial.readByte(); //Flush the incoming queue                  Serial.readByte(); //Flush the incoming queue
480                    Sleep(1);
481          }          }
   
482          OnBnClickedStart();          OnBnClickedStart();
483  }  }
484  void CFlisServerDlg::DeleteSms()  void CFlisServerDlg::DeleteSms()
# Line 498  void CFlisServerDlg::Reader() Line 538  void CFlisServerDlg::Reader()
538                          tekst.Append(":");                          tekst.Append(":");
539    
540                          CString command;                          CString command;
541                          bool plus;                          bool plus = false;
542                                  int pos = tekst.Find('+',0);                                  int pos = tekst.Find('+',0);
543                                  if (pos != -1)                                  if (pos != -1)
544                                  {                                  {
# Line 510  void CFlisServerDlg::Reader() Line 550  void CFlisServerDlg::Reader()
550                                  }                                  }
551                                                    
552                                                    
553                          if(tekst == "OK")                          if(tekst.MakeLower() == "ok")
554                          {                                {      
555                                  AppendText("OK tekst modtaget");                                  AppendText("OK tekst modtaget");
556                          }                          }
557                          else if (tekst == "error")                          else if (tekst.MakeLower() == "error")
558                          {                          {
559                                  CString send;                                  CString send;
560                                  send.Append("error tekst");                                  send.Append("error tekst");
# Line 524  void CFlisServerDlg::Reader() Line 564  void CFlisServerDlg::Reader()
564                          }                          }
565                          else if (plus == true)                          else if (plus == true)
566                          {                          {
567                                  if (command == "cmti")                                  if (command.MakeLower() == "cmti")
568                                  {                                  {
569                                          CString smscount, oldteskst;                                          CString smscount, oldteskst;
570                                          int pos = tekst.Find(',',0);                                          int pos = tekst.Find(',',0);
# Line 562  void CFlisServerDlg::Reader() Line 602  void CFlisServerDlg::Reader()
602                                                  ResetSms++;                                                  ResetSms++;
603    
604                                  }                                  }
605                                  else if(command == "wind")                                  else if(command.MakeLower() == "wind")
606                                  {                                  {
607    
608                                          CString send;                                          CString send;
# Line 574  void CFlisServerDlg::Reader() Line 614  void CFlisServerDlg::Reader()
614                          }                          }
615                          else                          else
616                          {                          {
617                                  CString send;                                  AppendText(tekst);
                                 send.Append("Anden tekst end forventet");  
                                 send.Append("\r\n");  
                                 send.Append(tekst);  
                                 AppendText(send);  
618                          }                          }
619                          if(ResetSms == 20)                          if(ResetSms == 20)
620                          {                          {
# Line 600  void CFlisServerDlg::Reader() Line 636  void CFlisServerDlg::Reader()
636                                  sIDnr = data[i].IDnr;                                  sIDnr = data[i].IDnr;
637                                  sCommandID = data[i].CommandID;                                  sCommandID = data[i].CommandID;
638                                  commandtest = atoi(data[i].CommandID);                                  commandtest = atoi(data[i].CommandID);
639                                    sInstallationsID = "0";
640    
641                                  if(commandtest > 1)                                  if(commandtest > 1)
642                                  {                                  {
643                                          sInstallationsID = data[i].InstallationsID;                                          sInstallationsID = data[i].InstallationsID;
644                                  }                                  }
645                          }                          }
646                          sIDnr = Splitter(testdata);                          
                         sCommandID = Splitter(testdata);  
                         sInstallationsID = "0";  
647                          if (commandtest > 1)                          if (commandtest > 1)
648                          {                          {
                                 sInstallationsID = Splitter(testdata);  
649                                  iAll = 0;                                  iAll = 0;
650                          }                          }
651    
# Line 620  void CFlisServerDlg::Reader() Line 654  void CFlisServerDlg::Reader()
654                                  SendConfig(sIDnr,sCommandID,sInstallationsID);                                  SendConfig(sIDnr,sCommandID,sInstallationsID);
655                          }                          }
656                          Sleep(500);                          Sleep(500);
657    
658                            CheckAcknowledges();
659                            Sleep(500);
660                    }
661                    CTime now = CTime::GetCurrentTime();
662    
663                    CTimeSpan elapsed = now-Alive.tid;
664    
665                    if (elapsed.GetTotalSeconds() >= 900)
666                    {
667                            keepaliveandread();
668                  }                  }
669  }  }
670  void CFlisServerDlg::SendConfig(CString IDnr,CString CommandID,CString InstallationsID)  void CFlisServerDlg::SendConfig(CString IDnr,CString CommandID,CString InstallationsID)
671  {  {      
         CString ServerTlfNr;  
         int i = 0;  
         ServerTlfNr = "29860132";  
                   
672                    
673          std::vector<Installation> inst;          std::vector<Installation> inst;
674          inst = DBReadPhone(InstallationsID);  
675          while (i < inst.size())          if (CommandID == "1")
676                    inst = DBReadPhone("0");
677            else
678                    inst = DBReadPhone(InstallationsID);
679    
680            for ( int j=0; j < inst.size(); j++)
681          {          {
682                  CString TlfNr, Imei, updaterate;                  CString TlfNr, Imei, updaterate;
683                  TlfNr.Empty();                  TlfNr.Empty();
684                  Imei.Empty();                  Imei.Empty();
685                  updaterate.Empty();                  updaterate.Empty();
686    
687                  CString dataen = inst[i].InstPhoneNr;                  CString dataen = inst[j].InstPhoneNr;
688                  TlfNr.Append(dataen);                  TlfNr.Append(dataen);
689                  CString Imeidata = inst[i].Imei;                  CString Imeidata = inst[j].Imei;
690                  Imei.Append(Imeidata);                  Imei.Append(Imeidata);
691                  CString updaterat = inst[i].Updaterate;                  CString updaterat = inst[j].Updaterate;
692                  updaterate.Append(updaterat);                  updaterate.Append(updaterat);
                 i++;  
           
         vector<unsigned char> tlfnr;  
         for (int i=0; i<TlfNr.GetLength(); i++)  
         {  
                 tlfnr.push_back(TlfNr[i]);  
         }  
693                    
694          int calcimei;                  vector<unsigned char> tlfnr;
695          __int64 buf;                  for (int i=0; i<TlfNr.GetLength(); i++)
696                    {
697                            tlfnr.push_back(TlfNr[i]);
698                    }
699                    
700                    int calcimei;
701                    __int64 buf;
702    
703          buf = atof(Imei);                  buf = atof(Imei);
704                            
705          calcimei = tversum(buf);                  calcimei = tversum(buf);
706                            
707          Imei.Format("%d",calcimei);                  Imei.Format("%d",calcimei);
708                            
709          SendSmsHead(tlfnr);                  SendSmsHead(tlfnr);
710          Sleep(250);                  Sleep(250);
711                            
712          vector<unsigned char> smsdata;                  vector<unsigned char> smsdata;
713                            
714          for (int i=0; i<Imei.GetLength(); i++)                  for (int i=0; i<Imei.GetLength(); i++)
715          {                  {
716                  smsdata.push_back(Imei[i]);                          smsdata.push_back(Imei[i]);
717          }                  }
718          smsdata.push_back(':');                  smsdata.push_back(':');
719          for (int i=0; i<ServerTlfNr.GetLength(); i++)                  for (int i=0; i<Alive.Phonenr.GetLength(); i++)
720          {                  {
721                  smsdata.push_back(ServerTlfNr[i]);                          smsdata.push_back(Alive.Phonenr[i]);
722          }                  }
723          smsdata.push_back(':');                  smsdata.push_back(':');
724          for (int i=0; i<updaterate.GetLength(); i++)                  for (int i=0; i<updaterate.GetLength(); i++)
725          {                  {
726                  smsdata.push_back(updaterate[i]);                          smsdata.push_back(updaterate[i]);
727          }                  }
728    
729                    SendSmsData(smsdata);
730                    Sleep(500);
731    
732                    if (IDnr != "0")
733                    {
734                            Acks.push_back( Acknowledge(inst[j].instID,TlfNr) );
735                    }
736    
         SendSmsData(smsdata);  
         Sleep(500);  
           
737          }          }
738    
739            if (IDnr != "0")
740            {
741                  CString SQL, Textwindow;                  CString SQL, Textwindow;
742                  SQL.Format("update command set executed=now() where id=%s",IDnr);                  SQL.Format("update command set executed=now() where id=%s",IDnr);
743                  db.ExecuteSQL(SQL);                  db.ExecuteSQL(SQL);
744                    Sleep(10);
745                  AppendText("Command executed");                  AppendText("Command executed");
746                  Sleep(150);          }
747            Sleep(150);
748    
749    
750    
751    
752  }  }
753  vector<Installation> CFlisServerDlg::DBReadPhone(CString sInstallationsID)  vector<Installation> CFlisServerDlg::DBReadPhone(CString sInstallationsID)
754  {  {
755          vector<Installation> buffer;          vector<Installation> buffer;
756    
757          CString SQL, phonenr, imei, updaterate;          CString SQL, phonenr, imei, updaterate, id;
         int installernull;  
758          Installation Myinst;          Installation Myinst;
759          installernull = atoi(sInstallationsID);  
760          if (installernull > 1)          if (sInstallationsID != "0")
761          {          {
762                  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);
763          }          }
764          else if(installernull < 2)          else
765          {          {
766                  SQL.Format("select installationphonenr, imei, updaterate from installation");                  SQL.Format("select installationphonenr, imei, updaterate, id from installation");
767          }          }
768    
769          CRecordset rs(&db);          CRecordset rs(&db);
770          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);          rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
771          if (rs.GetRecordCount()>0)          if (rs.GetRecordCount()>0)
# Line 719  vector<Installation> CFlisServerDlg::DBR Line 777  vector<Installation> CFlisServerDlg::DBR
777                          rs.GetFieldValue((short)0,phonenr);                          rs.GetFieldValue((short)0,phonenr);
778                          rs.GetFieldValue(1,imei);                          rs.GetFieldValue(1,imei);
779                          rs.GetFieldValue(2,updaterate);                          rs.GetFieldValue(2,updaterate);
780                            rs.GetFieldValue(3,id);
781    
782                          Myinst.InstPhoneNr = phonenr;                          Myinst.InstPhoneNr = phonenr;
783                          Myinst.Imei = imei;                          Myinst.Imei = imei;
784                          Myinst.Updaterate = updaterate;                          Myinst.Updaterate = updaterate;
785                            Myinst.instID = id;
786    
787                          buffer.push_back(Myinst);                          buffer.push_back(Myinst);
788                          rs.MoveNext();                          rs.MoveNext();
# Line 744  int CFlisServerDlg::tversum(__int64 inpu Line 804  int CFlisServerDlg::tversum(__int64 inpu
804  void CFlisServerDlg::OnBnClickedStart()  void CFlisServerDlg::OnBnClickedStart()
805  {  {
806  // TODO: Add your control notification handler code here  // TODO: Add your control notification handler code here
807        
808          continueThread = 1;          continueThread = 1;
809          m_Textwindow.SetWindowText("Started");          keepaliveandread();
810            Sleep(150);
811            m_Textwindow.SetWindowText(CString("Server phonenr read from db: ") + Alive.Phonenr );
812            AppendText("Started");
813          AfxBeginThread(threadWrapper,AfxGetMainWnd());          AfxBeginThread(threadWrapper,AfxGetMainWnd());
814  }  }
815  void CFlisServerDlg::AppendText(CString s)  void CFlisServerDlg::AppendText(CString s)
# Line 792  void ConfigFile::ReadSettings() Line 855  void ConfigFile::ReadSettings()
855          }          }
856    
857          file.close();          file.close();
858    }
859    void CFlisServerDlg::HandleAcknowledge(CString tlfnr)
860    {
861            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
862            {
863                    Acknowledge& current = (*it);
864                    if (current.sTlfNr == tlfnr)
865                    {
866                            CString SQL;
867                            SQL.Format("UPDATE installation SET commerror = false WHERE id = %s", current.sInstallationID);
868                            db.ExecuteSQL(SQL);
869    
870                            Acks.erase(it);
871    
872                            return;
873                    }
874            }
875    }
876    
877    void CFlisServerDlg::CheckAcknowledges()
878    {
879            CTime now = CTime::GetCurrentTime();
880            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
881            {
882                    Acknowledge& current = (*it);
883    
884                    CTimeSpan elapsed = now-current.cTime;
885    
886                    if (elapsed.GetTotalSeconds() >= 300)
887                    {
888                            DumpAckList();
889                            if (current.iRetry >= 1)
890                            {
891                                    CString SQL;
892                                    SQL.Format("UPDATE installation SET commerror = true WHERE id = %s", current.sInstallationID);
893                                    db.ExecuteSQL(SQL);
894                                    Acks.erase(it);
895                                    return; // the iterator is now invalidated, but the thread loop will make sure we are here soon again
896                            }
897                            else
898                            {
899                                    SendConfig("0","2",current.sInstallationID);
900                                    current.iRetry++;
901                                    current.cTime = CTime::GetCurrentTime();
902                                    AppendText( CString("Retry send config to ") + current.sTlfNr );
903                            }
904                    }
905            }
906    }
907    
908    void CFlisServerDlg::DumpAckList()
909    {
910            CTime now = CTime::GetCurrentTime();
911            OutputDebugString("-------------------------------\n");
912            int count = 0;
913            for (std::list<Acknowledge>::iterator it = Acks.begin(); it != Acks.end(); ++it)
914            {
915                    CString msg;
916                    msg.Format("%d:%d:%d> %4d : %s\n", now.GetHour(), now.GetMinute(), now.GetSecond(), count, (*it).sTlfNr);
917                    OutputDebugString(msg);
918                    count++;
919            }
920    }
921    vector<keepalive> CFlisServerDlg::keepaliveandread(void)
922    {
923            vector<keepalive> buffer;
924    
925            CString SQL, name, value;
926            SQL = "select name, value from config;";
927            CRecordset rs(&db);
928            try
929            {
930                    rs.Open(AFX_DB_USE_DEFAULT_TYPE, SQL);
931                    if (rs.GetRecordCount()>0)
932                    {
933                            rs.MoveFirst();
934                            
935                            rs.GetFieldValue((short)0, name);
936                            rs.GetFieldValue(1,value);
937                    
938                            Alive.name = name;
939                            Alive.value = value;
940                            Alive.tid = CTime::GetCurrentTime();
941                            if(Alive.name == "phonenr")
942                            {
943                                    Alive.Phonenr = value;
944                            }
945    
946                            buffer.push_back(Alive);
947                            rs.MoveNext();
948    
949                    }
950                    rs.Close();
951                    return buffer;
952            }
953            catch (char * str)
954            {
955                    AppendText("Keepalive failed, closing and opening the db connection again");
956                    if(db.IsOpen())
957                    {
958                            db.Close();
959                            AppendText("DB connection closed");
960                    }
961                    if(!db.IsOpen())
962                    {
963                            DBConnect();
964                            AppendText("DB connection started again");
965                    }
966            }
967    
968            
969  }  }

Legend:
Removed from v.136  
changed lines
  Added in v.158

  ViewVC Help
Powered by ViewVC 1.1.20