Commit 1444bccb authored by Milan Pumpalovic's avatar Milan Pumpalovic

prvi commit

parents
*.obj
*.dcu
*.pch
*.res
*.pdi
*.map
*.ils
*.ilf
*.ild
*.ilc
*.#0A
*.#00
*.#01
*.#02
*.#03
*.#04
*.#05
*.#06
*.#07
*.#08
*.#09
*.tds
*.dat
*.~1~
*.~2~
*.~4~
*.~3~
*.~5~
*.~6~
*.local
.project
Osnovne/__history/
Win32/Debug/cxPS_r
__history/
*.#0B
Win32/Debug/CashIT.log
CashIT.cbproj.local
Win32/Debug/verzija_projekta.res
verzija_projekta.rc.bak
verzija_projekta.rc
!VersionInfo/*.dll
Win32/Debug/CashIT.#0D
Win32/Debug/CashIT.#0C
Win32/Debug/frm_popis_robe10.ini
Win32/Debug/slike/RasporedLokala1.jpg
Win32/Debug/debug.txt
Win32/Debug/CashIT.exe
Win32/Debug/CashIT1.exe
Osnovne/BUS_osnovna_interne.dfm.orig
Win32/Debug/cxPS_popis
Win32/Debug/FTPUpdate.exe
Win32/Debug/connectionString
Win32/Debug/statusLog.txt
Win32/Debug/CashIT.log1
Win64/Debug/uBusFileUtils.o
Win64/Debug/uXMLApotekaLager.o
Win32/Debug/debug1.txt
Win32/Debug/frmMP.jpg
.project
.idea/
Win32/Debug/winvnc.exe
BUS_glavni.cpp.orig
Update/1_CashIT_polja_2015.sql.orig
Win32/Debug/debug/
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid6DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid9DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGridDBTableView2.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGridDBTableView6.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxStavke1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxZaglavlje.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_dbPromenaSarze.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_cxGridDBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_cxgKarticaLokalna.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_dbKartica1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_cxGrid2DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGridDBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGridDBTableView2.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_dbg.ini
Cashit.cbproj
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_dbStavke.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxZaglavlje.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxStavke1DBTableView1.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxGrid3DBTableView1.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxGrid1DBTableView1.ini
Prodaja/ch_MP.h.orig
Win32/Debug/log.txt
Win32/Debug/xml/fajl.zip
Win32/Debug/xml/novafaktura_s_lekari_13_11_2017.xml
Win32/Debug/xml/novafaktura_s_lekovi_01_11_2017.xml
Win32/Debug/xml/novafaktura_s_mtp_02_11_2017.xml
log1.log
Win32/Debug/Log/CashIT/CashIT.log
Win32/Debug/recepti/odradjeni/+1rA161240_04-12-2017_10-39-12.txt
Win32/Debug/recepti/odradjeni/nv131160_19-12-2017_09-36-46.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy_error.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy - Copy_error.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy - Copy.txt
Win32/Debug/xml/novafaktura_s_lekari_05_04_2018.xml
VersionInfo/changeVer2.bat
Win32/Debug/Log/CashIT/CashIT.logD
Win32/Debug/slike/artikli/2.png
Update/update 2012/bus_korpa.txt
Update/update 2012/evidencija_cekova
Update/update 2012/konta.txt
Update/update 2012/sin_tbl.txt
Win32/Debug/Log/CashIT/POSLEDNJI_RACUN.XML
Update/update 2012/tk_knjiga
Update/update 2012/predracun.txt
Win32/Debug/xml/novafaktura_s_lekari_10_09_2018.xml
BUS_host.h.orig
TMP1.$$$
Win32/Debug/podesavanje/UserSettings/
CashIT.~dsk
CashIT.exe
Update/A407_D160.bpl
Win32/Debug/Stampa/110228951/fr_racun_mp_sank_offline.pdf
Win32/Debug/PRODAJA_2.txt
Win32/Debug/ART.xml
Win32/Debug/RAC.xml
c_mpf_1.cpp.orig
twfiles.@@@
CashIT.twfd
CashIT.twopts
BUS_kartica_artikla.vlb
CashIT.dsk
TMP2.$$$
TMP3.$$$
TMP4.$$$
Update/Skripta_moja
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.exe
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.log
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.log1
Slanje_podataka_desktop/Win32/Debug/upx.exe
*.000
*.skincfg
Slanje_podataka_desktop/pSlanjePodataka.twfd
Slanje_podataka_desktop/pSlanjePodataka.twopts
Slanje_podataka_desktop/Win32/Debug/debug.txt
TMP5.$$$
TMP6.$$$
TMP7.$$$
TMP8.$$$
TMP10.$$$
TMP11.$$$
TMP12.$$$
TMP13.$$$
TMP14.$$$
TMP9.$$$
TMP15.$$$
TMP16.$$$
TMP17.$$$
TMP18.$$$
TMP19.$$$
TMP20.$$$
RZZOCenovnik/RzzoCenovnikApoteka.twfd
RZZOCenovnik/RzzoCenovnikApoteka.twopts
Prodaja/ch_MP_BACKUP_1966.h
Prodaja/ch_MP_BACKUP_2024.h
Prodaja/ch_MP_BASE_1966.h
Prodaja/ch_MP_BASE_2024.h
Prodaja/ch_MP_LOCAL_1966.h
Prodaja/ch_MP_LOCAL_2024.h
Prodaja/ch_MP_REMOTE_1966.h
Prodaja/ch_MP_REMOTE_2024.h
Win32/Debug/Deklaracije.exe
Update/tools/1sql.sql
Win32/Debug/Log/response.json
Win32/Debug/Log/status.json
Win32/Debug/Log/request.json
Win32/Debug/Log/verificationUrl.txt
Win32/Debug/Log/response - Copy.json
Win32/Debug/Log/journal.txt
Win32/Debug/frx28.bpl
Win32/Debug/fs28.bpl
Win32/Debug/dllStampaFisk.dll
Win32/Debug/vclx280.bpl
Win32/Debug/vcl280.bpl
Win32/Debug/rtl280.bpl
Win32/Debug/Log/pin.json
Update/tools/test.bat
Win32/Debug/Deklaracije2.exe
Win32/Debug/Log/backup/request2022-05-17-09-35-41.json
Win32/Debug/Log/backup/*.json
Win32/Debug/Log/CashIT/*.json
Win32/Debug/CashIT.logd1
Win32/Debug/RzzoCenovnikApoteka1.exe
*.xml
*.txt
RZZOCenovnik/Debug/xml/fajl.zip
Win32/Debug/Log/request_m.json
Doc/sef/makeXML.zip
Doc/sef/makeXML.lib
Doc/sef/eFaktura.lib
Doc/sef/eFaktura.dll
Doc/sef/TfrmSEF.dfm
Doc/sef/TfrmSEF.cpp
Doc/sef/makeXML.dll
Doc/sef/makeXML (1).zip
Doc/sef/eRacun.lib
Doc/sef/eRacun.dll
Doc/sef/Update.zip
Doc/sef/TfrmSEF.h
RZZOCenovnik/Debug/fqb190.lib
*.bak
*__recovery*
*__astcache*
__recovery/__recovery.ini
__recovery/c_dnevni_pazar.cpp
__recovery/c_dnevni_pazar.dfm
__recovery/c_dnevni_pazar.h
__recovery/c_restoran_pregled.cpp
__recovery/c_restoran_pregled.dfm
__recovery/c_restoran_pregled.h
__recovery/*.*
*__recovery*
CashIT.@@@
*.$$$
*.zip
*.obj-*
*.7z
Win32/Debug/slike/artikli/2035007.bmp
Win32/Debug/7z.exe
Win32/Debug/Log/CashIT/CashIT.logInsert
Win32/Debug/CashIT.str
Win32/Debug/slike/artikli/35768.bmp
Win32/Debug/slike/artikli/35800.bmp
Win32/Debug/slike/artikli/35806.bmp
Win32/Debug/slike/artikli/35885.bmp
Win32/Debug/slike/artikli/35892.bmp
*.log
*Win32/Debug/Log/*
Win32/Debug/slike/artikli/12556.jpg
Win32/Debug/slike/artikli/14613.bmp
Win32/Debug/slike/artikli/35758.bmp
Win32/Debug/slike/artikli/35760.bmp
Win32/Debug/slike/artikli/35761.bmp
Win32/Debug/slike/artikli/35770.bmp
Win32/Debug/slike/artikli/35784.bmp
Win32/Debug/slike/artikli/35845.bmp
Win32/Debug/slike/artikli/35861.bmp
Win32/Debug/Log/getInvoiceStatus.json
*.obj
*.dcu
*.pch
*.res
*.pdi
*.map
*.ils
*.ilf
*.ild
*.ilc
*.#0A
*.#00
*.#01
*.#02
*.#03
*.#04
*.#05
*.#06
*.#07
*.#08
*.#09
*.tds
*.dat
*.~1~
*.~2~
*.~4~
*.~3~
*.~5~
*.~6~
*.local
.project
Osnovne/__history/
Win32/Debug/cxPS_r
__history/
*.#0B
Win32/Debug/CashIT.log
CashIT.cbproj.local
Win32/Debug/verzija_projekta.res
verzija_projekta.rc.bak
verzija_projekta.rc
!VersionInfo/*.dll
Win32/Debug/CashIT.#0D
Win32/Debug/CashIT.#0C
Win32/Debug/frm_popis_robe10.ini
Win32/Debug/slike/RasporedLokala1.jpg
Win32/Debug/debug.txt
Win32/Debug/CashIT.exe
Win32/Debug/CashIT1.exe
Osnovne/BUS_osnovna_interne.dfm.orig
Win32/Debug/cxPS_popis
Win32/Debug/FTPUpdate.exe
Win32/Debug/connectionString
Win32/Debug/statusLog.txt
Win32/Debug/CashIT.log1
Win64/Debug/uBusFileUtils.o
Win64/Debug/uXMLApotekaLager.o
Win32/Debug/debug1.txt
Win32/Debug/frmMP.jpg
.project
.idea/
Win32/Debug/winvnc.exe
BUS_glavni.cpp.orig
Update/1_CashIT_polja_2015.sql.orig
Win32/Debug/debug/
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid6DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGrid9DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGridDBTableView2.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxGridDBTableView6.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxStavke1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_cxZaglavlje.ini
Win32/Debug/FormSettings/UserSettings/10/fmInterneOtpremnice_dbPromenaSarze.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_cxGridDBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_cxgKarticaLokalna.ini
Win32/Debug/FormSettings/UserSettings/11/fmKartica_dbKartica1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmMagacin_cxGrid2DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGrid1DBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGridDBTableView1.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_cxGridDBTableView2.ini
Win32/Debug/FormSettings/UserSettings/11/frmo_artikli_dbg.ini
Cashit.cbproj
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_dbStavke.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxZaglavlje.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxStavke1DBTableView1.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxGrid3DBTableView1.ini
Win32/Debug/podesavanje/UserSettings/6/fmNalogOtpreme_cxGrid1DBTableView1.ini
Prodaja/ch_MP.h.orig
Win32/Debug/log.txt
Win32/Debug/xml/fajl.zip
Win32/Debug/xml/novafaktura_s_lekari_13_11_2017.xml
Win32/Debug/xml/novafaktura_s_lekovi_01_11_2017.xml
Win32/Debug/xml/novafaktura_s_mtp_02_11_2017.xml
log1.log
Win32/Debug/Log/CashIT/CashIT.log
Win32/Debug/recepti/odradjeni/+1rA161240_04-12-2017_10-39-12.txt
Win32/Debug/recepti/odradjeni/nv131160_19-12-2017_09-36-46.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy_error.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy - Copy_error.txt
Win32/Debug/recepti/odradjeni/nv131160_14-02-2018_11-29-38 - Copy - Copy.txt
Win32/Debug/xml/novafaktura_s_lekari_05_04_2018.xml
VersionInfo/changeVer2.bat
Win32/Debug/Log/CashIT/CashIT.logD
Win32/Debug/slike/artikli/2.png
Update/update 2012/bus_korpa.txt
Update/update 2012/evidencija_cekova
Update/update 2012/konta.txt
Update/update 2012/sin_tbl.txt
Win32/Debug/Log/CashIT/POSLEDNJI_RACUN.XML
Update/update 2012/tk_knjiga
Update/update 2012/predracun.txt
Win32/Debug/xml/novafaktura_s_lekari_10_09_2018.xml
BUS_host.h.orig
TMP1.$$$
Win32/Debug/podesavanje/UserSettings/
CashIT.~dsk
CashIT.exe
Update/A407_D160.bpl
Win32/Debug/Stampa/110228951/fr_racun_mp_sank_offline.pdf
Win32/Debug/PRODAJA_2.txt
Win32/Debug/ART.xml
Win32/Debug/RAC.xml
c_mpf_1.cpp.orig
twfiles.@@@
CashIT.twfd
CashIT.twopts
BUS_kartica_artikla.vlb
CashIT.dsk
TMP2.$$$
TMP3.$$$
TMP4.$$$
Update/Skripta_moja
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.exe
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.log
Slanje_podataka_desktop/Win32/Debug/pSlanjePodataka.log1
Slanje_podataka_desktop/Win32/Debug/upx.exe
*.000
*.skincfg
Slanje_podataka_desktop/pSlanjePodataka.twfd
Slanje_podataka_desktop/pSlanjePodataka.twopts
Slanje_podataka_desktop/Win32/Debug/debug.txt
TMP5.$$$
TMP6.$$$
TMP7.$$$
TMP8.$$$
TMP10.$$$
TMP11.$$$
TMP12.$$$
TMP13.$$$
TMP14.$$$
TMP9.$$$
TMP15.$$$
TMP16.$$$
TMP17.$$$
TMP18.$$$
TMP19.$$$
TMP20.$$$
RZZOCenovnik/RzzoCenovnikApoteka.twfd
RZZOCenovnik/RzzoCenovnikApoteka.twopts
Prodaja/ch_MP_BACKUP_1966.h
Prodaja/ch_MP_BACKUP_2024.h
Prodaja/ch_MP_BASE_1966.h
Prodaja/ch_MP_BASE_2024.h
Prodaja/ch_MP_LOCAL_1966.h
Prodaja/ch_MP_LOCAL_2024.h
Prodaja/ch_MP_REMOTE_1966.h
Prodaja/ch_MP_REMOTE_2024.h
Win32/Debug/Deklaracije.exe
Update/tools/1sql.sql
Win32/Debug/Log/response.json
Win32/Debug/Log/status.json
Win32/Debug/Log/request.json
Win32/Debug/Log/verificationUrl.txt
Win32/Debug/Log/response - Copy.json
Win32/Debug/Log/journal.txt
Win32/Debug/frx28.bpl
Win32/Debug/fs28.bpl
Win32/Debug/dllStampaFisk.dll
Win32/Debug/vclx280.bpl
Win32/Debug/vcl280.bpl
Win32/Debug/rtl280.bpl
Win32/Debug/Log/pin.json
Update/tools/test.bat
Win32/Debug/Deklaracije2.exe
Win32/Debug/Log/backup/request2022-05-17-09-35-41.json
Win32/Debug/Log/backup/*.json
Win32/Debug/Log/CashIT/*.json
Win32/Debug/CashIT.logd1
Win32/Debug/RzzoCenovnikApoteka1.exe
*.xml
*.txt
RZZOCenovnik/Debug/xml/fajl.zip
Win32/Debug/Log/request_m.json
Doc/sef/makeXML.zip
Doc/sef/makeXML.lib
Doc/sef/eFaktura.lib
Doc/sef/eFaktura.dll
Doc/sef/TfrmSEF.dfm
Doc/sef/TfrmSEF.cpp
Doc/sef/makeXML.dll
Doc/sef/makeXML (1).zip
Doc/sef/eRacun.lib
Doc/sef/eRacun.dll
Doc/sef/Update.zip
Doc/sef/TfrmSEF.h
RZZOCenovnik/Debug/fqb190.lib
*.bak
*__recovery*
*__astcache*
__recovery/__recovery.ini
__recovery/c_dnevni_pazar.cpp
__recovery/c_dnevni_pazar.dfm
__recovery/c_dnevni_pazar.h
__recovery/c_restoran_pregled.cpp
__recovery/c_restoran_pregled.dfm
__recovery/c_restoran_pregled.h
__recovery/*.*
*__recovery*
CashIT.@@@
*.$$$
*.zip
*.obj-*
*.7z
Win32/Debug/slike/artikli/2035007.bmp
Win32/Debug/7z.exe
Win32/Debug/Log/CashIT/CashIT.logInsert
Win32/Debug/CashIT.str
Win32/Debug/slike/artikli/35768.bmp
Win32/Debug/slike/artikli/35800.bmp
Win32/Debug/slike/artikli/35806.bmp
Win32/Debug/slike/artikli/35885.bmp
Win32/Debug/slike/artikli/35892.bmp
*.log
*Win32/Debug/Log/*
Win32/Debug/slike/artikli/12556.jpg
Win32/Debug/slike/artikli/14613.bmp
Win32/Debug/slike/artikli/35758.bmp
Win32/Debug/slike/artikli/35760.bmp
Win32/Debug/slike/artikli/35761.bmp
Win32/Debug/slike/artikli/35770.bmp
Win32/Debug/slike/artikli/35784.bmp
Win32/Debug/slike/artikli/35845.bmp
Win32/Debug/slike/artikli/35861.bmp
Win32/Debug/Log/getInvoiceStatus.json
//---------------------------------------------------------------------------
#pragma hdrstop
#include "Enumeratori.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef EnumeratoriH
#define EnumeratoriH
//---------------------------------------------------------------------------
enum LoggingLevel
{
llDebug = 1,
llInfo = 2,
llCritical = 3
};
enum ProcessHandle
{
phKill,
phBroj
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TCompInfo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef TCompInfoH
#define TCompInfoH
#include <System.Classes.hpp>
#include <vector>
//---------------------------------------------------------------------------
class TCompInfo
{
public:
AnsiString _hostname;
AnsiString _defMagacin;
AnsiString _pib;
AnsiString _uid;
AnsiString _verzijaMP;
AnsiString _verzijaSinhro;
AnsiString _dir;
bool _SinhroDozvoljen;
std::vector<AnsiString> _ipAdrese;
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TFBBaza.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef TFBBazaH
#define TFBBazaH
#include <System.Classes.hpp>
#include <System.IOUtils.hpp>
#include <StrUtils.hpp>
//---------------------------------------------------------------------------
class TFBBaza
{
public:
AnsiString _nazivBaze;
AnsiString _lokacijaBaze;
AnsiString _server = "localhost";
AnsiString _port = "3050";
AnsiString _user = "SYSDBA";
AnsiString _password = "masterkey";
AnsiString _server_pun = "";
AnsiString BazaPunNaziv()
{
if (Linux()) {
return _lokacijaBaze + '/' + _nazivBaze;
}
else
{
return TPath::Combine(_lokacijaBaze, _nazivBaze);
}
}
AnsiString ServerPun()
{
AnsiString server = CompareText(_server, "127.0.0.1") == 0 ?
"localhost" : _server;
return server + "/" + _port;
}
AnsiString ConnectionString()
{
return ServerPun() + ":" + BazaPunNaziv();
}
bool LokalnaBaza()
{
return CompareText(_server, "127.0.0.1") == 0 || CompareText(_server, "localhost") == 0;
}
bool Linux()
{
return !_lokacijaBaze.IsEmpty() && _lokacijaBaze[1] == '/';
}
};
#endif
This diff is collapsed.
//---------------------------------------------------------------------------
#ifndef THelperH
#define THelperH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <System.JSON.hpp>
#include <StrUtils.hpp>
#include <System.IOUtils.hpp>
#include <System.IniFiles.hpp>
#include <Data.DB.hpp>
#include <Data.SqlExpr.hpp>
#include <Data.FMTBcd.hpp>
#include <Data.SqlExpr.hpp>
#include <Datasnap.DBClient.hpp>
#include <Datasnap.Provider.hpp>
#include <FireDAC.Comp.Client.hpp>
#include <FireDAC.Comp.DataSet.hpp>
#include <FireDAC.DApt.hpp>
#include <FireDAC.DApt.Intf.hpp>
#include <FireDAC.DatS.hpp>
#include <FireDAC.Phys.FB.hpp>
#include <FireDAC.Phys.FBDef.hpp>
#include <FireDAC.Phys.hpp>
#include <FireDAC.Phys.Intf.hpp>
#include <FireDAC.Stan.Async.hpp>
#include <FireDAC.Stan.Def.hpp>
#include <FireDAC.Stan.Error.hpp>
#include <FireDAC.Stan.Intf.hpp>
#include <FireDAC.Stan.Option.hpp>
#include <FireDAC.Stan.Param.hpp>
#include <FireDAC.Stan.Pool.hpp>
#include <FireDAC.UI.Intf.hpp>
#include <FireDAC.VCLUI.Wait.hpp>
#include <IdStack.hpp>
#include <IdStackWindows.hpp>
#include <vector>
#include <windows.h>
#include <process.h>
#include <psapi.h>
#include <Tlhelp32.h>
#include <winbase.h>
#include <shellapi.h>
#include "TRezultatOperacije.h"
#include "TFBBaza.h"
#include "Enumeratori.h"
#include "TCompInfo.h"
#include <fstream>
#include <string>
#include <sys/stat.h>
#include <iomanip>
#include <IdHTTP.hpp>
#include <IdMultipartFormData.hpp>
#include <map>
//---------------------------------------------------------------------------
class THelper
{
public:
THelper(){}
//Parsiranje fajlova
TRezultatOperacije<AnsiString> *ProcitajJSON(AnsiString sekcija, AnsiString kljuc,
AnsiString fajl = "confIT.json");
TRezultatOperacije<std::vector<AnsiString>> *ProcitajJSONNiz(AnsiString sekcija, AnsiString kljuc,
AnsiString fajl = "confIT.json");
std::unique_ptr<TRezultatOperacije<TFBBaza>> ProcitajIniFB(bool udaljena = false);
std::unique_ptr<TRezultatOperacije<TFBBaza>> ProcitajIniFB(AnsiString konekcija);
//Rad sa fajlovima
TRezultatOperacije<double> *PrazanProstor();
TRezultatOperacije<double> *VelicinaFajla(AnsiString fajl);
//Info o racunaru
TRezultatOperacije<TCompInfo> *DohvatiHostInformacije();
TRezultatOperacije<bool> *UpdateLokalniInfo(TCompInfo info);
TRezultatOperacije<float> *ZauzetoRadne(bool privatna = false);
//Rad sa procesima
TRezultatOperacije<int> *DohvatiProces(AnsiString naziv, ProcessHandle radnja);
TRezultatOperacije<bool> *PokreniProces(AnsiString putanja, AnsiString fajl);
TRezultatOperacije<bool> *UgasiProces(AnsiString naziv_programa);
//Baza
TRezultatOperacije<TFDConnection*> *NapraviKonekciju(bool udaljeni = false);
TRezultatOperacije<TFDConnection*> *NapraviKonekciju(AnsiString konekcija);
TRezultatOperacije<AnsiString> *DeparametrizujUpit(TSQLDataSet *dataset);
TRezultatOperacije<TJSONArray*> *RezultatJSON(TClientDataSet *upit);
//API
TRezultatOperacije<TJSONObject*> *PostAPI(AnsiString server, AnsiString api, TJSONObject *sadrzaj, std::map<AnsiString, AnsiString> hederi = std::map<AnsiString, AnsiString>());
TRezultatOperacije<bool> *ProveraAPI();
//Male pomocne
UnicodeString TrenutniDatumCist();
String escapeSpecialCharacters(String input);
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include <TRezultatOperacije.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef TRezultatOperacijeH
#define TRezultatOperacijeH
#include <System.Classes.hpp>
#include <Data.DB.hpp>
#include <Data.SqlExpr.hpp>
#include <FireDAC.Comp.Client.hpp>
#include <FireDAC.Comp.DataSet.hpp>
#include <FireDAC.DApt.hpp>
#include <FireDAC.DApt.Intf.hpp>
#include <FireDAC.DatS.hpp>
#include <FireDAC.Phys.FB.hpp>
#include <FireDAC.Phys.FBDef.hpp>
#include <FireDAC.Phys.hpp>
#include <FireDAC.Phys.Intf.hpp>
#include <FireDAC.Stan.Async.hpp>
#include <FireDAC.Stan.Def.hpp>
#include <FireDAC.Stan.Error.hpp>
#include <FireDAC.Stan.Intf.hpp>
#include <FireDAC.Stan.Option.hpp>
#include <FireDAC.Stan.Param.hpp>
#include <FireDAC.Stan.Pool.hpp>
#include <FireDAC.UI.Intf.hpp>
#include <FireDAC.VCLUI.Wait.hpp>
//---------------------------------------------------------------------------
template <typename T>
class TRezultatOperacije
{
private:
bool _uspeh;
AnsiString _greska;
T _rezultat;
public:
TRezultatOperacije(bool uspeh, T rezultat, AnsiString greska = "")
{
_uspeh = uspeh;
_greska = greska;
_rezultat = rezultat;
}
TRezultatOperacije(bool uspeh, std::unique_ptr<T> rezultat, AnsiString greska = "")
{
_uspeh = uspeh;
_greska = greska;
_rezultat = {*rezultat};
}
bool OperacijaUspela()
{
return _uspeh;
}
AnsiString DohvatiGresku()
{
return _greska;
}
T DohvatiRezultat()
{
if (!_uspeh)
{
throw std::runtime_error(_greska.c_str());
}
return _rezultat;
}
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TDataClasses.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef TDataClassesH
#define TDataClassesH
#include <System.Classes.hpp>
#include "TFBBaza.h"
//---------------------------------------------------------------------------
class TFileData
{
public:
AnsiString _targetFolder = "";
AnsiString _archiveName = "";
AnsiString _targetArch = "";
AnsiString _cashITDir = "";
AnsiString _tempDirPath = "";
};
class TFtpData
{
public:
AnsiString _server = "";
AnsiString _rootDir = "";
AnsiString _port = "";
AnsiString _username = "";
AnsiString _password = "";
};
class TDbData
{
public:
AnsiString _pib = "";
AnsiString _scriptFile = "";
AnsiString _logServer = "";
AnsiString _FBdll = "fbclient.dll";
AnsiString _ibeScriptdll = "";
TFBBaza _fbBaza;
};
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TDllWrap.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
bool TDllWrap::_lastCommandSuccess = true;
bool TDllWrap::_stopOnError = true;
int __stdcall OnConnectionError(char* error)
{
TLogger *logger = new TLogger();
logger->Log("ibescript.dll prijavljuje gresku pri konekciji: " + AnsiString(error), llCritical);
delete logger;
return 1;
}
int __stdcall OnError(char * text, char * errorMessage)
{
TLogger *logger = new TLogger();
logger->Log("ibescript.dll prijavljuje gresku: " + AnsiString(errorMessage), llCritical);
logger->Log("ibescript.dll tekst: " + AnsiString(text), llCritical);
TDllWrap::_lastCommandSuccess = false;
delete logger;
return 0;
}
int __stdcall OnBefore(char * statement, char * text)
{
TLogger *logger = new TLogger();
logger->Log("ibescript.dll radi: " + AnsiString(statement), llCritical);
if (CompareStr(AnsiString(text), "Executing IBEBlock...") != 0)
{
logger->Log(AnsiString(text), llCritical);
}
delete logger;
//if ((!TDllWrap::_lastCommandSuccess)&&TDllWrap::_stopOnError)
//{
// TDllWrap::_logger->Log("Aktivno zaustavljanje zbog greske, staje proces.", llCritical);
// return 1;
// }
return 0;
}
int __stdcall OnAfter(char * statement, int success)
{
if (success != 1)
{
TLogger *logger = new TLogger();
logger->Log("ibescript.dll nije uspeo da izvrsi: " + AnsiString(statement), llCritical);
delete logger;
TDllWrap::_lastCommandSuccess = false;
}
return 0;
}
TDllWrap::TDllWrap(TFileData &fileData, TFtpData &ftpData,
TDbData &dbData, bool stopOnError)
{
_ibeDll = LoadLibraryA(dbData._ibeScriptdll.c_str());
_connectDB = (TConnectDB)GetProcAddress(_ibeDll, "Connect");
_disconnectDB = (TDisconnectDB)GetProcAddress(_ibeDll, "Disconnect");
_executeFile = (TExecute)GetProcAddress(_ibeDll, "ExecScriptFile");
_executeText = (TExecute)GetProcAddress(_ibeDll, "ExecScriptText");
_dbData = &dbData;
_ftpData = &ftpData;
_fileData = &fileData;
_stopOnError = stopOnError;
}
void TDllWrap::CleanWorkFolder()
{
TLogger *logger = new TLogger();
logger->Log("Brisanje fajlova.", llDebug);
delete logger;
if (TDirectory::Exists(_fileData->_tempDirPath))
{
TDirectory::Delete(_fileData->_tempDirPath, true);
}
ForceDirectories(_fileData->_tempDirPath);
}
bool TDllWrap::ExecuteCommand(Commands command)
{
_lastCommandSuccess = true;
AnsiString commandText = "";
TLogger *logger = new TLogger();
switch (command)
{
case ecOnline:
case ecOnlineSingle:
{
AnsiString single = command == ecOnlineSingle ? "Mode=Single" : "";
logger->Log("Izvrsavam online baze.", llInfo);
commandText = "execute ibeblock as begin "
"err = ibec_OnlineDatabase("
"'" + _dbData->_fbBaza.ConnectionString() + "',"
"'ClientLib="
+ _dbData->_FBdll + ";"
"User=" + _dbData->_fbBaza._user + "; Password=" + _dbData->_fbBaza._password +";"
+ single + "'); "
"if (err is not null) then "
"exception ERR_EXP err;"
" end";
break;
}
case ecShutdown:
case ecShutdownFull:
{
AnsiString full = command == ecShutdownFull ? "Mode=Full" : "Mode=Single";
logger->Log("Izvrsavam shutdown baze.", llInfo);
commandText = "execute ibeblock as begin "
"err = ibec_ShutdownDatabase("
"'" + _dbData->_fbBaza.ConnectionString() + "',"
"'ClientLib="
+ _dbData->_FBdll + ";"
"User=" + _dbData->_fbBaza._user + "; Password=" + _dbData->_fbBaza._password +";"
+ full + "'); "
"if (err is not null) then "
"exception ERR_EXP err;"
" end";
break;
}
case ecRestore:
logger->Log("Izvrsavam restore baze.", llInfo);
commandText = "execute ibeblock as begin "
"err = ibec_RestoreDatabase("
"'" + TPath::Combine(_fileData->_targetFolder, _fileData->_archiveName) + "',"
"'" + _dbData->_fbBaza.BazaPunNaziv() + ".temp" + "',"
"'ClientLib="
+ _dbData->_FBdll + ";"
"User=" + _dbData->_fbBaza._user + "; Password=" + _dbData->_fbBaza._password +";"
"OneAtATime;INACTIVE;CREATE_DATABASE',null);"
"if (err is not null) then "
"exception ERR_EXP err;"
" end";
break;
case ecScript:
if (ExecuteCommand(ecShutdown) && ExecuteCommand(ecOnlineSingle))
{
logger->Log("Konektujem se na bazu.", llInfo);
ConnectToDb();
}
break;
case ecRecompileProcs:
if (ExecuteCommand(ecShutdown) && ExecuteCommand(ecOnlineSingle))
{
ConnectToDb();
logger->Log("Izvrsavam rekompajliranje svih procedura u bazi.", llInfo);
commandText = "execute ibeblock as begin "
"err = ibec_RecompileProcedure(0, '');"
"if (err <> '') then "
"exception ERR_EXP err; "
" end";
}
break;
case ecGetServerLog:
logger->Log("Uzimam fb serverski log.", llInfo);
commandText = "execute ibeblock as begin "
"ibec_GetServerLog("
"'ServerName=" + _dbData->_fbBaza.ServerPun() + ";"
"User=" + _dbData->_fbBaza._user + "; Password=" + _dbData->_fbBaza._password +";"
"ClientLib=" + _dbData->_FBdll +"','"
+ TPath::Combine(_fileData->_tempDirPath, "serverLog-" + _helper->TrenutniDatumCist() + ".txt") + "');"
"if (not ibec_FileExists('"
+ TPath::Combine(_fileData->_tempDirPath, "serverLog-" + _helper->TrenutniDatumCist() + ".txt") + "')) then "
"exception ERR_EXP 'Greska prilikom uzimanja serverskog loga.';"
"end";
break;
}
if (command == ecScript && _lastCommandSuccess)
{
logger->Log("Izvrsavam skriptu na bazi.", llInfo);
_executeFile(_dbData->_scriptFile.c_str(), OnError, OnBefore, OnAfter);
}else if (_lastCommandSuccess)
{
_executeText(commandText.c_str(), OnError, OnBefore, OnAfter);
}
if (!_lastCommandSuccess && (command == ecShutdownFull || command == ecShutdown))
{
logger->Log("Shutdown nije uspeo, pokusavam Online pa Shutdown.", llCritical);
if (ExecuteCommand(ecOnlineSingle)&&ExecuteCommand(command))
{
logger->Log("Shutdown je sada uspeo", llInfo);
} else
{
logger->Log("Shutdown jos uvek neuspesan, zaustavljam izvrsavanje.", llCritical);
return false;
}
} else if (!_lastCommandSuccess && _stopOnError)
{
logger->Log("Proces staje zbog prethodnih gresaka.", llCritical);
return false;
}
if (command == ecRestore)
{
_stopOnError = false;
ExecuteCommand(ecShutdownFull);
AnsiString fqDbName = _dbData->_fbBaza.BazaPunNaziv();
DeleteFile(fqDbName);
RenameFile(fqDbName + ".temp", fqDbName);
}
if (command == ecRestore || command == ecScript || command == ecRecompileProcs)
{
ExecuteCommand(ecOnline);
}
_disconnectDB();
delete logger;
return _lastCommandSuccess;
}
void TDllWrap::ConnectToDb()
{
AnsiString connString = "db_name="
"'" + _dbData->_fbBaza.ConnectionString() + "';"
"user_name=SYSDBA; password=masterkey;"
"clientlib='" + _dbData->_FBdll + "'; sql_role_name=ADMIN; sql_dialect=3;";
_connectDB(connString.c_str(), OnConnectionError);
}
//---------------------------------------------------------------------------
#ifndef TDllWrapH
#define TDllWrapH
#include <System.Classes.hpp>
#include <System.SysUtils.hpp>
#include <System.IOUtils.hpp>
#include <exception>
#include "Paketi\Logger\TLogger.h"
#include "TDataClasses.h"
#include "Paketi\Helper\THelper.h"
//---------------------------------------------------------------------------
//Int koji ovi callbackovi vracaju se koristi kao indikator uspesnosti, 0 je da nema greske
// te ako negde vratimo nesto <> 0
//dolazi do zaustavljanja izvrsavanja sql skripte.
//Success kod AfterExec radi kontra, on je kao bool
//te je 1 korektno, 0 je lose
typedef int (__stdcall *TConnErrorCallback)(char * errorMessage);
typedef int (__stdcall *TErrorCallback)(char * text, char * errorMessage);
typedef int (__stdcall *TBeforeExecCallback)(char * statement, char * text);
typedef int (__stdcall *TAfterExecCallback)(char * statement, int success);
typedef int (__stdcall *TBlockProgressCallback)(char * message);
typedef int __stdcall (*TConnectDB)(char *ConnectionString, TConnErrorCallback connectErrorCallback);
typedef int __stdcall (*TDisconnectDB)();
typedef void __stdcall (*TExecute)(char * text, TErrorCallback errorCallbackFunc,
TBeforeExecCallback beforeCallbackFunc, TAfterExecCallback afterCallbackFunc);
typedef void __stdcall (*TExecuteWithProgress)(char * text, TErrorCallback errorCallbackFunc,
TBeforeExecCallback beforeCallbackFunc, TAfterExecCallback afterCallbackFunc, TBlockProgressCallback blockProgressFunc);
enum Commands
{
ecOnline,
ecOnlineSingle,
ecShutdown,
ecShutdownFull,
ecRestore,
ecScript,
ecRecompileProcs,
ecGetServerLog
};
class TDllWrap
{
private:
TFileData *_fileData = new TFileData();
TFtpData *_ftpData = new TFtpData();
TDbData *_dbData = new TDbData();
THelper *_helper = new THelper();
HMODULE _ibeDll;
TConnectDB _connectDB;
TDisconnectDB _disconnectDB;
TExecute _executeFile;
TExecute _executeText;
void ConnectToDb();
bool _setupFTP = false;
public:
static bool _lastCommandSuccess;
static bool _stopOnError;
TDllWrap(TFileData &fileData, TFtpData &ftpData,
TDbData &dbData, bool stopOnError);
bool ExecuteCommand(Commands command);
void CleanWorkFolder();
};
#endif
This diff is collapsed.
//---------------------------------------------------------------------------
#ifndef TIbeWrapperH
#define TIbeWrapperH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <System.JSON.hpp>
#include <winbase.h>
#include <Processthreadsapi.h>
#include <Data.DB.hpp>
#include <FireDAC.Comp.Client.hpp>
#include <FireDAC.Comp.DataSet.hpp>
#include <FireDAC.DApt.hpp>
#include <FireDAC.DApt.Intf.hpp>
#include <FireDAC.DatS.hpp>
#include <FireDAC.Phys.FB.hpp>
#include <FireDAC.Phys.FBDef.hpp>
#include <FireDAC.Phys.hpp>
#include <FireDAC.Phys.Intf.hpp>
#include <FireDAC.Stan.Async.hpp>
#include <FireDAC.Stan.Def.hpp>
#include <FireDAC.Stan.Error.hpp>
#include <FireDAC.Stan.Intf.hpp>
#include <FireDAC.Stan.Option.hpp>
#include <FireDAC.Stan.Param.hpp>
#include <FireDAC.Stan.Pool.hpp>
#include <FireDAC.UI.Intf.hpp>
#include <FireDAC.VCLUI.Wait.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdExplicitTLSClientServerBase.hpp>
#include <IdFTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include "Paketi\Logger\TLogger.h"
#include "TDllWrap.h"
#include <System.IOUtils.hpp>
#include <fstream>
#include <string>
#include <windows.h>
#include <sys/stat.h>
#include <iomanip>
#include <vector>
#include <algorithm>
//---------------------------------------------------------------------------
class TIbeWrapper
{
private:
TLogger *_logger = new TLogger();
THelper *_helper = new THelper();
TDllWrap *_wrapper = nullptr;
TIdFTP *CreateFTP();
AnsiString _zip7 = "";
void InitWrapper();
bool _initDone = false;
void CashITDir(bool cashIT = false);
bool _ftpOK = true;
bool _dbOK = true;
protected:
public:
TFtpData *_ftpData = new TFtpData();
TDbData *_dbData = new TDbData();
TFileData *_fileData = new TFileData();
bool _stopOnError = false;
TRezultatOperacije<bool> *BekapujBazu(AnsiString nazivBackupa, bool sacuvajBackup = false);
TRezultatOperacije<bool> *RestorujBazu(AnsiString nazivBackupa, bool trajniDir = false);
TRezultatOperacije<bool> *IzvrsiSkripte();
TRezultatOperacije<bool> *IzvrsiSkriptu(UnicodeString skripta);
TRezultatOperacije<bool> *RekompajlirajProcedure();
TRezultatOperacije<bool> *PreuzmiFajl(AnsiString filename, AnsiString destFilename = "", bool fqPutanja = false);
TRezultatOperacije<bool> *DohvatiServerLog();
TRezultatOperacije<bool> *DohvatiPodesavanja();
TRezultatOperacije<bool> *DohvatiLogove();
TRezultatOperacije<AnsiString> *PosaljiArhivu(AnsiString filename);
TRezultatOperacije<bool> *ArhivirajDirektorijum(AnsiString filename, bool cashIT);
TRezultatOperacije<bool> *OtpakujFajl(AnsiString filename, bool cashIT = false);
TRezultatOperacije<bool> *OtpakujFajlPrepiska(AnsiString filename, bool cashIT = false);
TRezultatOperacije<bool> *PokreniUpdejt(AnsiString zakazano = "", bool izApp = false);
TRezultatOperacije<bool> *OcistiRadni();
void PripremiUpdejt(std::map<AnsiString, AnsiString> hederi);
bool StopOnScriptError;
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TLogWorker.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
using namespace std;
TLogWorker* TLogWorker::_instance{nullptr};
mutex TLogWorker::_mutexSI;
TLogWorker::TLogWorker()
{
_levels[llDebug] = "Debug";
_levels[llInfo] = "Info";
_levels[llCritical] = "Critical";
map<UnicodeString, LoggingLevel> stringToLevel;
stringToLevel["Debug"] = llDebug;
stringToLevel["Info"] = llInfo;
stringToLevel["Critical"] = llCritical;
auto logConfOp = _helper->ProcitajJSON("konfiguracija", "logNivo");
AnsiString exeFile=Application->ExeName;
AnsiString cashITdir = ExtractFilePath(exeFile);
_logDirectory = TPath::Combine(cashITdir, "Log\\CashIT");
if (logConfOp->OperacijaUspela())
{
auto severity = logConfOp->DohvatiRezultat();
_loggingLevel = stringToLevel[severity];
}
delete logConfOp;
}
TLogWorker *TLogWorker::GetInstance()
{
lock_guard<mutex> lock(_mutexSI);
if (_instance == nullptr)
{
_instance = new TLogWorker();
}
return _instance;
}
void TLogWorker::Log(UnicodeString message, const LoggingLevel level, AnsiString fajl)
{
if (level < _loggingLevel)
{
return;
}
auto date = Now();
UnicodeString filename = "";
if (!_logDirectory.IsEmpty()) {
TDirectory::CreateDirectory(_logDirectory);
}
if (fajl.IsEmpty())
{
filename = TPath::Combine(_logDirectory, "log " + _helper->TrenutniDatumCist() + ".log");
}else
{
filename = TPath::Combine(_logDirectory, TPath::GetFileNameWithoutExtension(fajl) + " " + _helper->TrenutniDatumCist() + ".log");
}
message = date.DateString() + " - " + date.TimeString() + " - " + _levels[level] + " - " + message + "\n";
if (_salji != nullptr)
{
_salji(message);
}
lock_guard<mutex> lock(_mutexFS);
TFileStream *fs = nullptr;
int greska = 0;
try
{
if (FileExists(filename, false))
{
fs = new TFileStream(filename, fmOpenReadWrite | fmShareDenyWrite);
}else
{
try
{
BackupLogs();
}catch(...){}
fs = new TFileStream(filename, fmCreate | fmShareDenyWrite);
}
SE_OBJECT_TYPE objectType = SE_FILE_OBJECT;
SECURITY_INFORMATION securityInfo = DACL_SECURITY_INFORMATION;
SECURITY_DESCRIPTOR securityDescriptor;
InitializeSecurityDescriptor(&securityDescriptor, SECURITY_DESCRIPTOR_REVISION);
PSID everyoneSid = NULL;
SID_IDENTIFIER_AUTHORITY sidAuthority = SECURITY_WORLD_SID_AUTHORITY;
AllocateAndInitializeSid(&sidAuthority, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &everyoneSid);
EXPLICIT_ACCESS explicitAccess;
ZeroMemory(&explicitAccess, sizeof(EXPLICIT_ACCESS));
explicitAccess.grfAccessPermissions = GENERIC_ALL;
explicitAccess.grfAccessMode = SET_ACCESS;
explicitAccess.grfInheritance= NO_INHERITANCE;
explicitAccess.Trustee.TrusteeForm = TRUSTEE_IS_SID;
explicitAccess.Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP;
explicitAccess.Trustee.ptstrName = (LPTSTR) everyoneSid;
PACL acl = NULL;
SetEntriesInAcl(1, &explicitAccess, NULL, &acl);
SetSecurityDescriptorDacl(&securityDescriptor, TRUE, acl, FALSE);
SetNamedSecurityInfo(filename.t_str(), objectType, securityInfo, NULL, NULL, acl, NULL);
FreeSid(everyoneSid);
LocalFree(acl);
fs->Seek(0, soFromEnd);
auto byteArr = message.BytesOf();
fs->Write(byteArr, byteArr.size());
delete fs;
}catch (...)
{
delete fs;
greska = 1;
}
if (greska == 1)
{
TStringList* fajl = new TStringList();
if (FileExists(filename))
{
fajl->LoadFromFile(filename, TEncoding::Default);
}
int greskaPisanje = 0;
try
{
fajl->Append(message);
} catch (Exception& e)
{
Sleep(500);
greskaPisanje = 1;
}
try
{
fajl->SaveToFile(filename, TEncoding::Default);
} catch (Exception& e) {
Sleep(500);
greskaPisanje = 2;
}
if (greskaPisanje == 2)
{
if (FileExists(filename))
{
fajl->SaveToFile(filename, TEncoding::Default);
}
}
delete fajl;
}
}
void TLogWorker::BackupLogs()
{
if (_logDirectory.IsEmpty()) {
_logDirectory = "c:\\bus\\c11\\log\\cashit\\";
}
AnsiString path = TPath::Combine(_logDirectory, "stariLogovi.7z");
AnsiString exeFile = Application->ExeName;
AnsiString cashITdir = ExtractFilePath(exeFile);
AnsiString zip = TPath::Combine(cashITdir, "7za.exe");
AnsiString comm = "cmd.exe /c " + zip + " a -xr!*.7z -xr!*" + _helper->TrenutniDatumCist() + "* -bb0 -r -y \""
+ path + "\" \"" + TPath::Combine(_logDirectory, "*.log") + "\" >> archLog.txt";
PROCESS_INFORMATION procInfo;
STARTUPINFO startInfo;
memset(&procInfo, 0, sizeof(procInfo));
memset(&startInfo, 0, sizeof(startInfo));
startInfo.cb = sizeof(startInfo);
CreateProcess(nullptr, UnicodeString(comm).t_str(), nullptr, nullptr, false,
NORMAL_PRIORITY_CLASS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW,
nullptr, nullptr, &startInfo, &procInfo);
WaitForSingleObject(procInfo.hProcess, 300000);
CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);
bool success = FileExists(path);
if (!success)
{
Log("Neuspeh kod arhiviranja log fajlova.", llCritical);
return;
}
TStringDynArray files;
try
{
files = TDirectory::GetFiles(_logDirectory, "*.log", TSearchOption::soAllDirectories);
for (int i = 0; i < files.Length; i++)
{
AnsiString fileName = files[i];
if (!AnsiContainsText(fileName, _helper->TrenutniDatumCist()))
{
DeleteFile(fileName);
}
}
} catch(...){}
}
void TLogWorker::ObrisiLogger()
{
if (_instance != nullptr)
{
std::lock_guard<std::mutex> lock(_mutexSI);
delete _instance;
_instance = nullptr;
}
}
//---------------------------------------------------------------------------
#ifndef TLogWorkerH
#define TLogWorkerH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <StrUtils.hpp>
#include <System.SysUtils.hpp>
#include <System.IOUtils.hpp>
#include <map>
#include <mutex>
#include <thread>
#include <FireDAC.Comp.Client.hpp>
#include <FireDAC.Comp.DataSet.hpp>
#include <FireDAC.DApt.hpp>
#include <FireDAC.DApt.Intf.hpp>
#include <FireDAC.DatS.hpp>
#include <FireDAC.Phys.FB.hpp>
#include <FireDAC.Phys.FBDef.hpp>
#include <FireDAC.Phys.hpp>
#include <FireDAC.Phys.Intf.hpp>
#include <FireDAC.Stan.Async.hpp>
#include <FireDAC.Stan.Def.hpp>
#include <FireDAC.Stan.Error.hpp>
#include <FireDAC.Stan.Intf.hpp>
#include <FireDAC.Stan.Option.hpp>
#include <FireDAC.Stan.Param.hpp>
#include <FireDAC.Stan.Pool.hpp>
#include <FireDAC.UI.Intf.hpp>
#include <FireDAC.VCLUI.Wait.hpp>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdExplicitTLSClientServerBase.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include "Paketi\Helper\THelper.h"
#include <Aclapi.h>
#include <Windows.h>
#include <map>
typedef void (*SlanjeLogova)(UnicodeString red);
class TLogWorker
{
private:
static TLogWorker* _instance;
static std::mutex _mutexSI;
std::mutex _mutexFS;
THelper *_helper = new THelper();
void BackupLogs();
std::map<int, UnicodeString> _levels;
protected:
TLogWorker();
~TLogWorker()
{
delete _helper;
};
public:
static TLogWorker *GetInstance();
static void ObrisiLogger();
TLogWorker(TLogWorker &other) = delete;
void operator=(const TLogWorker &) = delete;
LoggingLevel _loggingLevel = llCritical;
UnicodeString _logDirectory = "";
void Log(UnicodeString message, const LoggingLevel level, AnsiString fajl = "");
SlanjeLogova _salji = nullptr;
};
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TLogger.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
void TLogger::Log(UnicodeString message, const LoggingLevel level, AnsiString fajl)
{
_logger->Log(message, level, fajl);
}
void TLogger::LiveLogovi(SlanjeLogova slanje)
{
_logger->_salji = slanje;
}
//---------------------------------------------------------------------------
#ifndef TLoggerH
#define TLoggerH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
#include "TLogWorker.h"
class TLogger
{
private:
TLogWorker* _logger = TLogWorker::GetInstance();
protected:
public:
TLogger(){}
void Log(UnicodeString message, const LoggingLevel level, AnsiString fajl = "");
void LiveLogovi(SlanjeLogova slanje);
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TPingLog.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
void TPingLog::DodajPing(unsigned int rt)
{
if (rt < _min)
{
_min = rt;
}
if (rt > _max)
{
_max = rt;
}
_pingovi.push_back(rt);
_sent++;
}
int TPingLog::BrojPingova()
{
return _sent;
}
void TPingLog::DodajNeuspeli()
{
_sent++;
}
int TPingLog::SrednjiRoundTrip()
{
if (_sent == 0 || _pingovi.size() == 0)
{
_logger->Log("Nema izvrsenih pingova", llCritical);
throw std::runtime_error("Nema izvrsenih pingova");
}
return _pingovi.size()/std::accumulate(_pingovi.begin(), _pingovi.end(), 0);
}
bool TPingLog::KatastrofalnaGreska()
{
return _pingovi.size() == 0;
}
int TPingLog::MaxRoundTrip()
{
return _max;
}
int TPingLog::MinRoundTrip()
{
return _min;
}
int TPingLog::ProcenatIzgubljenih()
{
if (_sent == 0)
{
_logger->Log("Nema izvrsenih pingova", llCritical);
throw std::runtime_error("Nema izvrsenih pingova");
}else if (_pingovi.size() == 0)
{
return 100;
}else if(_pingovi.size() == _sent)
{
return 0;
}else
{
return int((float(_sent)/_pingovi.size())*100);
}
}
//---------------------------------------------------------------------------
#ifndef TPingLogH
#define TPingLogH
#include <numeric>
#include <vector>
#include "Paketi\Logger\TLogger.h"
class TPingLog
{
private:
TLogger *_logger = new TLogger();
std::vector<unsigned int> _pingovi;
int _sent = 0;
int _min = 999999;
int _max = 0;
public:
~TPingLog()
{
delete _logger;
}
void DodajPing(unsigned int rt);
void DodajNeuspeli();
bool KatastrofalnaGreska();
int MaxRoundTrip();
int MinRoundTrip();
int SrednjiRoundTrip();
int ProcenatIzgubljenih();
int BrojPingova();
};
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "TPinger.h"
#pragma comment(lib, "Ws2_32.lib")
#pragma package(smart_init)
using namespace std;
using namespace std::chrono_literals;
bool TPinger::TestPing(AnsiString meta)
{
bool result = false;
auto icmpClient = new TIdIcmpClient(nullptr);
auto logger = new TLogger();
icmpClient->ReceiveTimeout = 1000;
try
{
icmpClient->Host = meta;
icmpClient->Ping();
bool success = icmpClient->ReplyStatus->ReplyStatusType == rsEcho;
if (success)
{
logger->Log("Ping ok ka: " + meta, llDebug);
result = true;
}else
{
logger->Log("Ping ne prolazi ka: " + meta, llCritical);
}
}catch (Exception &ex)
{
logger->Log("Ping ne prolazi ka: " + meta, llCritical);
}catch (std::exception &stdex)
{
logger->Log("Ping ne prolazi ka: " + meta, llCritical);
}
delete icmpClient;
delete logger;
return result;
}
bool TPinger::TestPort(AnsiString meta, int portInt)
{
try
{
AnsiString port = IntToStr(portInt);
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
struct sockaddr_in clientService;
int iResult;
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0)
{
return false;
}
struct addrinfo* result = nullptr;
struct addrinfo hints;
struct sockaddr_in sa;
int ipAdresa = inet_pton(AF_INET, meta.c_str(), &(sa.sin_addr));
if (ipAdresa == 1)
{
sa.sin_family = AF_INET;
sa.sin_port = htons(atoi(port.c_str()));
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
WSACleanup();
return false;
}
iResult = connect(ConnectSocket, (struct sockaddr*)&sa, sizeof(sa));
} else
{
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
iResult = getaddrinfo(meta.c_str(), port.c_str(), &hints, &result);
if (iResult != 0)
{
WSACleanup();
return false;
}
ConnectSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ConnectSocket == INVALID_SOCKET)
{
freeaddrinfo(result);
WSACleanup();
return false;
}
iResult = connect(ConnectSocket, result->ai_addr, (int)result->ai_addrlen);
}
bool ok = false;
if (iResult == SOCKET_ERROR)
{
int error = WSAGetLastError();
if (error == WSAEWOULDBLOCK || error == WSAEINPROGRESS)
{
ok = true;
}
}
else
{
ok = true;
}
if (result != nullptr)
{
freeaddrinfo(result);
}
closesocket(ConnectSocket);
WSACleanup();
return ok;
}catch(...)
{
return false;
}
}
void TPinger::StartTrajniTest(AnsiString meta, int razmakSekunde, bool logujSve)
{
auto logger = new TLogger();
if (_pingRunning)
{
logger->Log("Ping vec pokrenut!", llCritical);
delete logger;
return;
}
_pingRunning = true;
_stopPing = false;
_pingLog = new TPingLog();
_backPing = TTask::Create ([&, razmakSekunde, logujSve, meta]()
{
std::chrono::duration<int, std::ratio<1, 1>> razmak = razmakSekunde * 1s;
TIdIcmpClient *client = new TIdIcmpClient(nullptr);
client->Host = meta;
client->ReceiveTimeout = 1000;
do
{
if (_stopPing)
{
break;
}
try
{
client->Ping("BUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERS"
"BUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERSBUSCOPMUTERS");
if (client->ReplyStatus->ReplyStatusType == rsEcho)
{
unsigned int rtt = client->ReplyStatus->MsRoundTripTime;
_pingLog->DodajPing(rtt);
if (logujSve)
{
logger->Log("Ping: " + meta + " -- " + UIntToStr(rtt) + "ms", llDebug);
}
}else
{
_pingLog->DodajNeuspeli();
logger->Log("Ping: " + meta + " -- nije uspeo", llCritical);
}
} catch(Exception &ex)
{
logger->Log("Ping: " + meta + " -- nije uspeo", llCritical);
logger->Log("Greska: " + ex.Message, llCritical);
_pingLog->DodajNeuspeli();
}
unique_lock<mutex> lock(_awaiterMutex);
_awaiter.wait_for(lock, razmak);
}while(true);
delete logger;
delete client;
});
_backPing->Start();
}
void TPinger::StartTrajniPortTest(AnsiString meta, unsigned int port,
int razmakSekunde, bool logujSve)
{
auto logger = new TLogger();
if (_pingRunning)
{
logger->Log("Ping vec pokrenut!", llCritical);
return;
}
_pingRunning = true;
_stopPing = false;
_pingLog = new TPingLog();
_backPing = TTask::Create ([&, razmakSekunde, logujSve, meta, port]()
{
std::chrono::duration<int, std::ratio<1, 1>> razmak = razmakSekunde * 1s;
TIdTCPClient *tcpClient = new TIdTCPClient(nullptr);
tcpClient->Host = meta;
tcpClient->Port = port;
tcpClient->ConnectTimeout = 1000;
do
{
if (_stopPing)
{
break;
}
try
{
auto start = std::chrono::high_resolution_clock::now();
tcpClient->Connect();
tcpClient->Disconnect();
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> duration = end - start;
int durationMs = int(duration.count()*1000);
_pingLog->DodajPing(durationMs);
if (logujSve)
{
logger->Log("FB konekt/diskonekt: " + meta + " -- " + IntToStr(durationMs) + "ms", llInfo);
}
}catch (Exception &e)
{
logger->Log( "Nema konekcije ka serveru: " + meta + ":" + UIntToStr(port), llCritical);
_pingLog->DodajNeuspeli();
}catch (std::exception &stdex)
{
logger->Log( "Nema konekcije ka serveru: " + meta + ":" + UIntToStr(port), llCritical);
_pingLog->DodajNeuspeli();
}
unique_lock<mutex> lock(_awaiterMutex);
_awaiter.wait_for(lock, razmak);
}
while(true);
delete logger;
delete tcpClient;
});
_backPing->Start();
}
TPingLog *TPinger::ZaustaviTrajniTest(bool logujRezultate)
{
auto logger = new TLogger();
_stopPing = true;
_awaiter.notify_all();
_backPing->Wait();
_pingRunning = false;
if (logujRezultate)
{
logger->Log("Broj izvrsenih: " + IntToStr(_pingLog->BrojPingova()), llCritical);
logger->Log("Procenat izgubljenih: " + IntToStr(_pingLog->ProcenatIzgubljenih()) + "%", llCritical);
if (!_pingLog->KatastrofalnaGreska())
{
logger->Log("Prosecno: " + IntToStr(_pingLog->SrednjiRoundTrip()) + "ms", llCritical);
logger->Log("Minimum: " + IntToStr(_pingLog->MinRoundTrip()) + "ms", llCritical);
logger->Log("Maksimum: " + IntToStr(_pingLog->MaxRoundTrip()) + "ms", llCritical);
}
}
delete logger;
return _pingLog;
}
//---------------------------------------------------------------------------
#ifndef TPingerH
#define TPingerH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <IdIcmpClient.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
#include <System.Threading.hpp>
#include <condition_variable>
#include <chrono>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include "Paketi\Logger\TLogger.h"
#include "TPingLog.h"
//---------------------------------------------------------------------------
class TPinger
{
private:
_di_ITask _backPing = nullptr;
TPingLog *_pingLog = new TPingLog();
std::condition_variable _awaiter;
std::mutex _awaiterMutex;
bool _stopPing = false;
bool _pingRunning = false;
protected:
public:
TPinger(){}
~TPinger()
{
if (_pingLog != nullptr)
{
delete _pingLog;
}
}
bool TestPing(AnsiString meta);
bool TestPort(AnsiString meta, int portInt);
void StartTrajniTest(AnsiString meta, int razmakSekunde, bool logujSve = false);
TPingLog *ZaustaviTrajniTest(bool logujRezultate = false);
void StartTrajniPortTest(AnsiString meta, unsigned int port, int razmakSekunde, bool logujSve = false);
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "DllWrapper.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
DllWrapper::DllWrapper()
{
UnicodeString dll = "RabbitWrap.dll";
hDLL = LoadLibrary(dll.t_str());
Diskonekcija = (NoParamsFunc)GetProcAddress(hDLL, "Disconnect");
PosaljiPorukuBrzo = (SendMsgQ)GetProcAddress(hDLL, "QuickSendMessageMQ");
PotvrdiPrijem = (AckMsg)GetProcAddress(hDLL, "AckMessageMQ");
StatusSoketa = (SocketStatusFunc)GetProcAddress(hDLL, "GetSocketStatus");
ProveraKanala = (IsConsumingCheck)GetProcAddress(hDLL, "IsConsuming");
AdminKonekcija = GetProcAddress(hDLL, "AdminConnect");
Konekcija = GetProcAddress(hDLL, "Connect");
EventPoruka = GetProcAddress(hDLL, "ReadMessageMQ");
NapraviPrijemneRazmene = GetProcAddress(hDLL, "DeclareRcvExchange");
PosaljiPoruku = GetProcAddress(hDLL, "SendMessageMQ");
}
DllWrapper::~DllWrapper()
{
FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
#ifndef DllWrapperH
#define DllWrapperH
#pragma once
#include <System.Classes.hpp>
#include <Windows.h>
#include <string>
#include <functional>
#include <map>
#include <System.Threading.hpp>
#include "Paketi\Helper\THelper.h"
typedef void (*NoParamsFunc)();
typedef void (CallbackStatus)(bool, const char*);
typedef void (*IsConsumingCheck)(const char*, CallbackStatus);
typedef bool (*SocketStatusFunc)();
typedef const char* (*ConnectFunc)(NoParamsFunc, NoParamsFunc, const char*, const char*, const char*, int, int);
typedef void (*SendMsg)(const char*, const char*, const char* const [], const char* const [], CallbackStatus, bool, const char*);
typedef void (*SendMsgQ)(const char*, const char*, const char* const [], const char* const []);
typedef void (*RcvMsgExternal) (std::map<AnsiString, AnsiString>, const char*, int);
typedef void (*RcvMsgInternal) (const char**, const char**, const char*, int);
typedef void (*AckMsg) (int);
typedef void (*SubscribeChn)(RcvMsgInternal, const char*);
typedef void (*AdminConnect)(const char*, RcvMsgInternal);
typedef void (*DecExch)(NoParamsFunc, const char*, const char*, const char*);
class DllWrapper
{
public:
FARPROC Konekcija;
FARPROC EventPoruka;
FARPROC NapraviPrijemneRazmene;
FARPROC PosaljiPoruku;
FARPROC AdminKonekcija;
SocketStatusFunc StatusSoketa;
NoParamsFunc Diskonekcija;
SendMsgQ PosaljiPorukuBrzo;
AckMsg PotvrdiPrijem;
RcvMsgExternal PoPrijemu;
IsConsumingCheck ProveraKanala;
bool _rdy = false;
bool _stop = false;
AnsiString _uid = "";
int _paralelnoPoruka = 1;
NoParamsFunc _rekonekcija;
DllWrapper();
~DllWrapper();
private:
HINSTANCE hDLL;
};
#endif
This diff is collapsed.
//---------------------------------------------------------------------------
#ifndef TZecH
#define TZecH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
#include <map>
#include "DllWrapper.h"
#include "TipoviPoruka.h"
#include "Paketi\Helper\THelper.h"
#include "UpdatePodesavanja.h"
#include <System.Math.hpp>
#include "Paketi\Logger\TLogger.h"
#include "Paketi\Ping\TPinger.h"
//---------------------------------------------------------------------------
class TZec
{
private:
protected:
public:
static void KonektujSe(NoParamsFunc rekonekcija, int paralelnoPoruka = 1, AnsiString app = "");
static void PoslajiLog(UnicodeString logPoruka, LoggingLevel nivo, CallbackStatus statusCallback);
static void PosaljiPoruku(const std::map<AnsiString, AnsiString>& hederi, AnsiString poruka, AnsiString uid, CallbackStatus statusCallback,
bool naSve = false, AnsiString trajanje = "");
static void PosaljiTekst(AnsiString uid, AnsiString teskt, bool kratkotrajno, CallbackStatus statusCallback);
static void Prijem(AnsiString kanal, RcvMsgExternal prijem);
static void PotvrdiPrijem(int tag);
static void PokreniUpdate(AnsiString uid, TPodesavanja* updejtPodesavanja, CallbackStatus statusCallback);
static void Diskonektuj();
static void PosaljiFajlove(AnsiString uid, CallbackStatus statusCallback);
static void PosaljiBazu(AnsiString uid, CallbackStatus statusCallback);
static void PreuzmiFajl(AnsiString uid, AnsiString naziv, AnsiString fajl, CallbackStatus statusCallback);
static void StatusSinhronizacije(std::map<AnsiString, AnsiString> stanja, CallbackStatus statusCallback);
static void IzvrsiSql(AnsiString uid, UnicodeString sql, CallbackStatus statusCallback);
static void PrijaviIzvrsenjeSql(AnsiString uid, UnicodeString sta, bool greska,
bool rezultat, CallbackStatus statusCallback);
static void PrijaviOperaciju(AnsiString uid, TipPoruke operacija, bool uspeh,
AnsiString poruka, CallbackStatus statusCallback);
static void Prijava(CallbackStatus statusCallback);
static AnsiString TipPorukeUString(TipPoruke tip);
static TipPoruke StringUTipPoruke(AnsiString tip);
static void Bloker();
static void Provera();
static void KonekcijaZatvorena();
static void Konektovan();
static void Gotov();
static void StatusKonekcije(bool ok, const char* poruka);
static void PrijemPorukeInterno(const char** zaglavljeNazivi, const char** zaglavljeVrednosti, const char* poruka, int brPoruke);
static bool _stopZec;
static const AnsiString _dan;
static const AnsiString _8sati;
static const AnsiString _sat;
static const char* const* Hederi(const std::map<AnsiString, AnsiString>& hederiMapa, bool vrednosti);
static void ProveraStatusa();
static DllWrapper* _dllWrapper;
static THelper* _helperZec;
static TLogger* _loggerZec;
static TPinger* _pingerZec;
static TCompInfo _info;
static bool _connUtoku;
static bool _inError;
static bool _prijavljen;
static bool _gotInfo;
static AnsiString _server;
static int _port;
static AnsiString _app;
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "TipoviPoruka.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
AnsiString TipPorukeUStringInternal(TipPoruke tip)
{
switch(tip)
{
case tpPrijava:
return "prijava";
case tpPoruka:
return "poruka";
case tpUpdate:
return "update";
case tpUploadFiles:
return "uploadFiles";
case tpUploadDb:
return "uploadDb";
case tpDownload:
return "download";
case tpSqlExec:
return "sqlExec";
case tpSqlReport:
return "sqlReport";
case tpKrajOperacije:
return "krajOperacije";
case tpListajLogove:
return "listajLogove";
case tpPrikaziLogove:
return "prikaziLogove";
case tpLiveLogovi:
return "liveLogovi";
case tpStanjeSinhro:
return "stanjeSinhro";
case tpSinhroToggle:
return "sinhroToggle";
case tpPrijavaGreske:
return "prijavaGreske";
default:
throw Exception("Los tip poruke");
}
}
TipPoruke StringUTipPorukeInternal(AnsiString tip)
{
if (CompareText(tip, "prijava") == 0)
{
return tpPrijava;
}else if (CompareText(tip, "poruka") == 0)
{
return tpPoruka;
}else if (CompareText(tip, "update") == 0)
{
return tpUpdate;
}else if (CompareText(tip, "uploadFiles") == 0)
{
return tpUploadFiles;
}else if (CompareText(tip, "uploadDb") == 0)
{
return tpUploadDb;
}else if (CompareText(tip, "download") == 0)
{
return tpDownload;
}else if (CompareText(tip, "sqlExec") == 0)
{
return tpSqlExec;
}else if (CompareText(tip, "sqlReport") == 0)
{
return tpSqlReport;
}else if (CompareText(tip, "krajOperacije") == 0)
{
return tpKrajOperacije;
}else if (CompareText(tip, "listajLogove") == 0)
{
return tpListajLogove;
}else if (CompareText(tip, "prikaziLogove") == 0)
{
return tpPrikaziLogove;
}else if (CompareText(tip, "liveLogovi") == 0)
{
return tpLiveLogovi;
}else if (CompareText(tip, "stanjeSinhro") == 0)
{
return tpStanjeSinhro;
}else if (CompareText(tip, "sinhroToggle") == 0)
{
return tpSinhroToggle;
}else if (CompareText(tip, "prijavaGreske") == 0)
{
return tpPrijavaGreske;
}
throw Exception("Los tip poruke");
}
//---------------------------------------------------------------------------
#ifndef TipoviPorukaH
#define TipoviPorukaH
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
enum TipPoruke
{
tpPrijava,
tpPoruka,
tpUpdate,
tpUploadFiles,
tpUploadDb,
tpDownload,
tpSqlExec,
tpSqlReport,
tpKrajOperacije,
tpListajLogove,
tpPrikaziLogove,
tpLiveLogovi,
tpStanjeSinhro,
tpSinhroToggle,
tpPrijavaGreske
};
AnsiString TipPorukeUStringInternal(TipPoruke tip);
TipPoruke StringUTipPorukeInternal(AnsiString tip);
#endif
//---------------------------------------------------------------------------
#pragma hdrstop
#include "UpdatePodesavanja.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
#ifndef UpdatePodesavanjaH
#define UpdatePodesavanjaH
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
enum TipUpdejta
{
tuPokretanje,
tuOdmah,
tuZakazan
};
struct TPodesavanja
{
public:
TipUpdejta _tipUpdejta;
AnsiString _poruka;
bool _porukaPonavljanje;
bool _backupBaze;
bool _backupApp;
bool _fajlovi;
bool _skripte;
bool _restart;
TDateTime _vreme;
int _brojRacunara;
AnsiString _firma;
int _vremeTrajanja;
};
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment