⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rucniterminal.cpp

📁 load data from pc to hand held terminal and vice versa
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -