📄 rucniterminal.cpp
字号:
// RucniTerminal.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "RucniTerminal.h"
#include "RucniTerminalDlg.h"
#include "Identifikator.h"
#include "PrvaLozinkaDlg.h"
#include "UnosLozinkeDlg.h"
#include "LozinkaDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRucniTerminalApp
BEGIN_MESSAGE_MAP(CRucniTerminalApp, CWinApp)
//{{AFX_MSG_MAP(CRucniTerminalApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
// ON_COMMAND(ID_HELP, CWinApp::OnHelp)
ON_COMMAND(ID_HELP, NeRadiNista)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRucniTerminalApp construction
CRucniTerminalApp::CRucniTerminalApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CRucniTerminalApp object
CRucniTerminalApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CRucniTerminalApp initialization
BOOL CRucniTerminalApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
//
// INICIJALIZACIJA se vrsi pozivom procedure 'KKomunikator::Init()', cime se setuju :
// - konfiguracioni parametri ( citaju se iz konfiguracione datoteke koja se nalazi
// u zadatom direktorijumu )
// - parametri transakcije ( broj pokusaja i tajmaut )
//
string cTekuciDir = "";
char buffer[_MAX_PATH];
// Naziv exe datoteke
string cNazivExeDatoteke = this->m_pszAppName;
cNazivExeDatoteke += ".exe";
// Direktorijum konfiguiracione datoteke ( treba da bude direktorijum aplikacije )
if ( _getcwd( buffer, _MAX_PATH ) != NULL ) { // tekuci direktorijum
cTekuciDir.append( buffer );
cTekuciDir += "\\";
}
// Odradi inicijalizaciju
KKomunikator::Instance()->Init( cNazivExeDatoteke, cTekuciDir, 2, 0.5 );
// Inicjilaizuj lokalne parametre
TerminalPrikljucen( false );
// Zapamti verziju Windowsa na kojoj se program izvrsava
ProcitajVerzijuWindowsa();
CRucniTerminalDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
// Procedura razdvaja naziv datoteke od staze :
// ulaz je pun naziv datoteke, a izlaz su naziv i staza razdvojeno.
void CRucniTerminalApp::OdvojiDatotekuOdStaze( CString cPunNaziv, CString& cNaziv, CString& cStaza ){
cNaziv = "";
cStaza = "";
int nPunaDuzina = cPunNaziv.GetLength();
if ( nPunaDuzina > 0 ) { // ako string nije prazan
int nKrajStaze = cPunNaziv.ReverseFind( '\\' );
int nPom = cPunNaziv.ReverseFind( ':' );
if ( nPom > nKrajStaze ) nKrajStaze = nPom;
if ( nKrajStaze == -1 ){ // ako staza nije zadata
cNaziv = cPunNaziv;
}
else {
cStaza = cPunNaziv.Left( nKrajStaze + 1 );
cNaziv = cPunNaziv.Right( nPunaDuzina - 1 - nKrajStaze );
}
}
}
// Prikazi poruku sa datim ID-om i pretvori kursor u 'pescanik'
void CRucniTerminalApp::PrikaziPorukuIKursorZaCekanje( UINT nID, CWnd* pParentWnd ){
// Kursor pretvori u oblik pescanika
BeginWaitCursor();
// Prikazi dijalog sa odgovarajucom porukom
porukaDlg.Create( IDD_PORUKA, pParentWnd );
porukaDlg.PostaviTekstPoruke( nID );
porukaDlg.UpdateData( FALSE );
}
// Ukloni poruku sa ekrana i vrati kursor u normalan oblik
void CRucniTerminalApp::UkloniPorukuIKursorZaCekanje( void ){
// Ukloni dijalog sa porukom
porukaDlg.DestroyWindow();
// Kursor u normalan oblik
EndWaitCursor();
}
// Prikazi dijalog sa sigurnosnim pitanjem.
// Ulazni parametar je ID poruke( pitanja ) u tabeli stringova.
int CRucniTerminalApp::PrikaziSigurnosnoPitanje( UINT nID ){
sigurPitanjeDlg.PostaviTekst( nID );
return sigurPitanjeDlg.DoModal();
}
// Prikazi dijalog sa pitanjem da li korisnik zeli da nastavi prethodno prekinuti prenos
// ili da prenese sve podatke ponovo.
int CRucniTerminalApp::PrikaziPitanjeONastavku( void ){
nastavakDlg.Odgovor = nastavakDlg.EOdgovor::ODGOVOR_ODUSTANI;
return nastavakDlg.DoModal();
}
// Funkcija vraca true ako je korisnik u prethodnom pozivu dijaloga o nastavku prenosa
// izabrao da zeli nastavak prenosa.
bool CRucniTerminalApp::NastaviPrenos( void ){
if ( nastavakDlg.Odgovor == nastavakDlg.EOdgovor::ODGOVOR_NASTAVI )
return true;
else
return false;
}
// Prikazuje dijalog sa tekstom ciji je ID zadat
int CRucniTerminalApp::MyMessageBox( UINT nID ){
CString cPomStr;
cPomStr.LoadString( nID );
return AfxMessageBox( cPomStr );
}
// Postavlja format datumskog polja sa zadatim ID-om
void CRucniTerminalApp::FormatirajDateTimePicker( int ID, LPCTSTR pstrFormat, CWnd* dijalog ){
CDateTimeCtrl* kontrola = (CDateTimeCtrl*)dijalog->GetDlgItem( ID );
if ( kontrola != NULL ) {
kontrola->SetFormat( pstrFormat );
}
}
// Cita 'admin info' sa terminala koriscenjem 'brze' komunikacije ( kraci tajmauti )
// i smesta u datu promenljivu ( admInf ). U slucaju neuspeha vraca 'false'.
bool CRucniTerminalApp::OcitajUbrzanoAdminInfo( KAdminInfo& admInf ){
bool izlaz;
UspostaviBrzuKomunikaciju();
izlaz = KKomunikator::Instance()->DajAdminInfoTerminala( admInf, true );
VratiNormalnuKomunikaciju();
return izlaz;
}
// Proverava 'ID aplikacije' koriscenjem 'brze' komunikacije sa terminalom.
bool CRucniTerminalApp::ProveriIDUbrzano( void ){
bool izlaz;
UspostaviBrzuKomunikaciju();
izlaz = KKomunikator::Instance()->ProveriPCAppID( KVazeciID::Instance()->DajAppID() );
VratiNormalnuKomunikaciju();
return izlaz;
}
// Otkljucava datu funkciju terminala koriscenjem 'brze' komunikacije.
bool CRucniTerminalApp::OtkljucajFunkcijuUbrzano( EIDKomande ID, string& cLozinka,
KAdminInfo& admInf, string& cAppID ){
bool izlaz;
bool PodrzanPCAppID = KKomunikator::Instance()->
PodrzanPCAppID( admInf.nVerzija, admInf.nPodverzija );
UspostaviBrzuKomunikaciju();
izlaz = KKomunikator::Instance()->OtkljucajFunkcijuTerminala( ID, cLozinka,
PodrzanPCAppID, cAppID );
VratiNormalnuKomunikaciju();
return izlaz;
}
// Zakljucava datu funkciju terminala koriscenjem 'brze' komunikacije.
bool CRucniTerminalApp::ZakljucajFunkcijuUbrzano( EIDKomande ID, KAdminInfo& admInf,
string& cAppID ){
bool izlaz;
bool PodrzanPCAppID = KKomunikator::Instance()->
PodrzanPCAppID( admInf.nVerzija, admInf.nPodverzija );
UspostaviBrzuKomunikaciju();
izlaz = KKomunikator::Instance()->ZakljucajFunkcijuTerminala( ID, PodrzanPCAppID, cAppID );
VratiNormalnuKomunikaciju();
return izlaz;
}
// Procedura za proveru veze sa terminalom.
// Ukoliko veza ne postoji, procedura vraca false.
bool CRucniTerminalApp::InicijalizujVezuSaTerminalom( bool& bZakljucan, bool& bIspravanID,
KAdminInfo& admInf ){
bool bIzlaz = true;
bZakljucan = false;
bIspravanID = true;
if ( OcitajUbrzanoAdminInfo( admInf ) ) {
bZakljucan = admInf.bTerminalZakljucan;
// ID se proverava samo kod nove verzije terminala
if ( KKomunikator::Instance()->PodrzanPCAppID( admInf.nVerzija, admInf.nPodverzija ) ) {
bIspravanID = ProveriIDUbrzano();
}
}
else bIzlaz = false;
return bIzlaz;
}
// Procedura proverava da li je terminal spreman za prijem naredne komande.
// Ako je terminal spreman, vraca true i podatke o terminalu ( admInf ).
// Ako terminal nije spreman, vraca false i poruku sa opisom problema( PorukaID ).
bool CRucniTerminalApp::TerminalSpreman( int& PorukaID, KAdminInfo& admInf ){
bool bVezaOK = false;
// Najpre proveri vezu sa terminalom ( da li je terminal uopste prikljucen,
// da li je zakljucan i da li je ID odgovarajuci )
bool bZakljucan;
bool bIspravanID;
if ( !InicijalizujVezuSaTerminalom( bZakljucan, bIspravanID, admInf ) ) {
PorukaID = IDS_LOSA_VEZA;
}
else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -