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

📄 engine.cpp

📁 SYMBIAN S60 2ND列车时刻表软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include <stringloader.h>
#include <Train.rsg>

#include <eikenv.h>
#include <charconv.h> 
#include <pathinfo.h>

#include <aknnotedialog.h> // CAknWaitNoteWrapper
#include <eikprogi.h> // CEikProgressInfo

#include "Engine.h"
#include "TSSResult.h"
#include "OTResult.h"
#include "MagicTrain.pan"
#include "MagicTrainAppUi.h"


_LIT(KStationFilePath,"Nokia\\Installs\\DDTrain\\station.dll");
_LIT(KTrainFilePath,"Nokia\\Installs\\DDTrain\\train.dll");
_LIT(KTrainLineFilePath,"Nokia\\Installs\\DDTrain\\trainline.dll");
	
Engine* Engine::NewL(CMagicTrainAppUi* aAppUi)
{
	Engine* self = NewLC(aAppUi);
	CleanupStack::Pop(self);
	return self;
}
Engine* Engine::NewLC(CMagicTrainAppUi* aAppUi)
{
	Engine* self = new (ELeave) Engine(aAppUi);
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
}
Engine::Engine(CMagicTrainAppUi* aAppUi)
{
	iAppUi = aAppUi;
}
Engine::~Engine()
{

	if (iProvinceArray) {
		iProvinceArray->Reset();
		delete iProvinceArray;
	}
	if (iStationArray) {
		iStationArray->ResetAndDestroy();
		delete iStationArray;
	}
	if (iTrainArray) {
		iTrainArray->ResetAndDestroy();
		delete iTrainArray;
	}
	if (iTrainDetailArray) {
		iTrainDetailArray->ResetAndDestroy();
		delete iTrainDetailArray;
	}
}
void Engine::ConstructL()
{
	iProvinceArray = new (ELeave) RPointerArray<Province>(10);
	
	//ConstructPosL();
	ConstructFilePathL();
	ConstructStationL();
	ConstructTrainL();
	ConstructTrainDetailL();
}
void Engine::ConstructPosL()
{
/*
	_LIT(KSubPath,"data\\installs\\DoDoTrain\\DoDoTrain.dll");  
    iPath.Append(_L("Z:\\"));
    iPath.Append(KSubPath);
    RFs fs;
	RFileReadStream rs;
	CleanupClosePushL(fs);
	CleanupClosePushL(rs);
	User::LeaveIfError(fs.Connect());
    if ( rs.Open(fs,iPath,EFileRead) != KErrNone) {
    	iPath.SetLength(0);
    	iPath.Append(PathInfo::MemoryCardRootPath());
    	iPath.Append(KSubPath);
    	rs.Close();
    	if ( rs.Open(fs,iPath,EFileRead) != KErrNone) {
    		CleanupStack::PopAndDestroy(2);
    		Panic(ELoadTrainDLL);
    	}
    }

	iCTrainIndexPos = 20;
	iStationTrainIndexPos = rs.ReadInt32L();
	iStationPos = rs.ReadInt32L();
	iStationTrainPos = rs.ReadInt32L();
	iTrainPos = rs.ReadInt32L();
	iCTrainPos = rs.ReadInt32L();

	CleanupStack::PopAndDestroy(2);
	*/
}
void Engine::ConstructFilePathSubL(RFs& fs,RFileReadStream& rs,TFileName& aFilePath,TFileName& aSubFilePath)
{
#ifdef _DEBUG
	aFilePath.Append(_L("C:\\"));
#else
	aFilePath.Append(_L("C:\\"));
#endif
    aFilePath.Append(aSubFilePath);
    TInt err;
	err = rs.Open(fs,aFilePath,EFileRead);
	if (err != KErrNone) {
    	aFilePath.SetLength(0);
    	aFilePath.Append(PathInfo::MemoryCardRootPath());
    	aFilePath.Append(aSubFilePath);
    	rs.Close();
    	if ( rs.Open(fs,aFilePath,EFileRead) != KErrNone) {
    		CleanupStack::PopAndDestroy(2);
    		Panic(ELoadTrainDLL);
    	}	
	}
    rs.Close();
}
void Engine::ConstructFilePathL()
{
	RFs fs;
	RFileReadStream rs;
	CleanupClosePushL(fs);
	CleanupClosePushL(rs);
	User::LeaveIfError(fs.Connect());
	
	TFileName SubStationFilePath(KStationFilePath);
	TFileName SubTrainFilePath(KTrainFilePath);
	TFileName SubTrainLineFilePath(KTrainLineFilePath);
	
	ConstructFilePathSubL(fs,rs,iStationFilePath,SubStationFilePath);
	ConstructFilePathSubL(fs,rs,iTrainFilePath,SubTrainFilePath);
	ConstructFilePathSubL(fs,rs,iTrainLineFilePath,SubTrainLineFilePath);
   
    CleanupStack::Pop();
    CleanupStack::PopAndDestroy();
}
void Engine::ConstructStationL()
{

	RFs fs;
	RFileReadStream rs;
	User::LeaveIfError(fs.Connect());
	TInt err = rs.Open(fs,iStationFilePath,EFileRead|EFileStream);
	if (err == KErrNotFound) {
		Panic(EDataFileNotFound);
	}
	TInt inputchar;
	TInt inputcharnum;
	TBuf8<10> inputstr;
	TBuf16<5> inputstrutf;
	iStationCount = rs.ReadInt16L();
	
	iStationArray = new (ELeave) RPointerArray<Station>(iStationCount);
	
	for (TInt i=0;i<iStationCount;i++) { //3992
		Station* station = new (ELeave) Station;
		(*station).iID = rs.ReadInt16L();
		
		inputcharnum = 0;
		inputstrutf.SetLength(0);
		inputchar = rs.ReadInt16L();
		while (inputchar != 0) {
			inputstrutf.Append(inputchar);
			inputcharnum++;
			if (inputcharnum == 5) break;
			inputchar = rs.ReadInt16L();
		}
		inputcharnum = 4-inputcharnum;
		while ( inputcharnum > 0 ){
			rs.ReadInt16L();
			inputcharnum = inputcharnum -1;
		}
			
//		HBufC* stationname;
//		stationname = inputstrutf.Alloc();
		(*station).iName = inputstrutf.Alloc();
		
//		station.iName = HBufC::NewL(inputstrutf.Length());
//		*(station.iName) = inputstrutf;
		
		iStationArray->Append(station);
	}
	rs.Close();
	fs.Close();

}

void Engine::ConstructTrainL()
{
	RFs fs;
	RFileReadStream rs;
	User::LeaveIfError(fs.Connect());
	TInt err = rs.Open(fs,iTrainFilePath,EFileRead|EFileStream);
	if (err == KErrNotFound) {
		Panic(EDataFileNotFound);
	}
//	rs.ReadL(iTrainPos);
	TInt inputchar;
	TInt inputcharnum;
	TBuf<20> inputstr;
	iTrainCount = rs.ReadInt16L();
	
	iTrainArray = new (ELeave) RPointerArray<CTrain>(iTrainCount);
	
	for (TInt i=0;i<iTrainCount;i++) { //3802
		CTrain* train = new (ELeave) CTrain;
		//rs.ReadL(2);
		train->iID = rs.ReadInt16L();
		
		inputcharnum = 0;
		inputstr.SetLength(0);
		inputchar = rs.ReadInt8L();
		while (inputchar != 0) {
			inputstr.Append(inputchar);
			inputcharnum++;
			if (inputcharnum == 20) break;
			inputchar = rs.ReadInt8L();
		}
		inputcharnum = 19-inputcharnum;
		while ( inputcharnum > 0 ){
			rs.ReadInt8L();
			inputcharnum = inputcharnum -1;
		}
		train->iType = rs.ReadInt8L();
		train->iStartStationID = rs.ReadInt16L();
		train->iArriveStationID = rs.ReadInt16L();
		rs.ReadL(14);
		
//		CTrain.iName = HBufC::NewL(inputstr.Length());
		train->iName = inputstr.Alloc();
		
		iTrainArray->Append(train);
		
	}
	rs.Close();
	fs.Close();
}

void Engine::ConstructTrainDetailL()
{
	RFs fs;
	RFileReadStream rs;
	User::LeaveIfError(fs.Connect());
	TInt err = rs.Open(fs,iTrainLineFilePath,EFileRead|EFileStream);
	if (err == KErrNotFound) {
		Panic(EDataFileNotFound);
	}
	iTrainLineCount = rs.ReadUint16L();
	iTrainLineCount = iTrainLineCount + rs.ReadUint8L() * 65535;
	
	iTrainDetailArray = new (ELeave) RPointerArray<COTResult>(iTrainLineCount);
	for (TInt i=0;i<iTrainLineCount;i++) { //3802
		COTResult* traindetail = new (ELeave) COTResult;
		rs.ReadInt8L();
		rs.ReadInt16L();	//skip 3 bytes.
		traindetail->iTrainID = rs.ReadInt16L();
		traindetail->iStationID = rs.ReadInt16L();
		traindetail->iSort = rs.ReadInt8L();
		traindetail->iDate = rs.ReadInt8L();
		traindetail->iArriveTime = rs.ReadInt8L();
		traindetail->iArriveTime = traindetail->iArriveTime * 100 + rs.ReadInt8L();
		traindetail->iStartTime = rs.ReadInt8L();
		traindetail->iStartTime = traindetail->iStartTime * 100 + rs.ReadInt8L();
		traindetail->iMileAge = rs.ReadInt16L();
		traindetail->iHardSeat = rs.ReadInt16L();
		traindetail->iSoftSeat = rs.ReadInt16L();
		traindetail->iHardBerth = rs.ReadInt16L();
		traindetail->iSoftBerth = rs.ReadInt16L();
		
		iTrainDetailArray->Append(traindetail);
		
	}
	rs.Close();
	fs.Close();
}
TBool Engine::GetTrainByStation(const TDesC& aStation,RPointerArray<COSResult>* aOSResult)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -