#pragma once #include "../stdafx.h" #include #include "JobFileProcessor.h" #include "H3DFileProcessor.h" enum JCONTROLLERFUNC { LOADJOB = 0, REMOVEALLJOB, GENERALINFO, //h3d文件部分 MACHINETYPE, //h3d文件部分 machinetype PARTINFO, //h3d文件部分 LAYERS, //h3d文件部分 CURRLAYERINFO, //h3d文件部分 current layer PREVLAYERINFO, //h3d文件部分 preview layer RECALCEVATIME, //重新计算估算时间 UPDATEPARAMETERSET, //更新ParameterSet ERRORINFO, //校验错误信息 JOBPARAM, //job参数 UPDATEPARAM, //更新参数 ONELAYERDATA, //请求一层的数据 }; class JobController { public: enum LoadProgressInfoFlag { AnalyzingJobData = 0, CkeckingJobData, }; JobController(); ~JobController(); static void SInit() { InitializeCriticalSection(&m_LoadInfoCS); } static void SUninit() { DeleteCriticalSection(&m_LoadInfoCS); } bool LoadJob(string filepath); //传 void StartLoadPrepareJob(); //不用 void RemoveJob(string job_title); //无用 void RemoveAllJob(); //传 FileProcessor* GetJob(void) { return m_CurrentJob; } //传 FileProcessor* GetUnFinishedJob(); //不用 float GetLoadProgress(); //传 string GetLoadInfo(); //传 bool IsLoadFinished(); //传 void StartSavePrepareJob(); //无用 bool IsSavingPrepareJob(); //无用 static void SetLoadProgress(float fvalue) { //无用 EnterCriticalSection(&m_LoadInfoCS); m_LoadProgress = fvalue; LeaveCriticalSection(&m_LoadInfoCS); } void SendToClients(); void CallFuncs(const ReadData& rd, const list& lst = list(), ::stream::ResponseAny** response = nullptr); private: static DWORD WINAPI LoadProc(JobController* _this); static DWORD WINAPI LoadPrepareJobProc(JobController* _this); static DWORD WINAPI SavePrepareJobProc(JobController* _this); void LoadRun(); void LoadJob(const list& lst, ::stream::ResponseAny** response); void GeneralInfoReq(::stream::ResponseAny** response); void PartInfoReq(::stream::ResponseAny** response); void LayersReq(::stream::ResponseAny** response); void LayerInfoReq(JCONTROLLERFUNC type, ::stream::ResponseAny** response); void MachineTypeReq(::stream::ResponseAny** response); //void PrevLayerInfoReq(::stream::ResponseAny** response); void JobParamReq(::stream::ResponseAny** response); void UpdateParam(const ReadData& rd, const list& lst); public: static const int JOB_SUCCESS = 0; static const int JOB_ERROR_HAD_LOAD = -0x1000; static const int JOB_ERROR_PROCESS_FILE = -0x10001; CRITICAL_SECTION m_cs; FileProcessor* m_PrepareJob; CRITICAL_SECTION m_PreJobCS; static LoadProgressInfoFlag m_LoadProgressInfoFlag; private: FileProcessor* m_CurrentJob; FileProcessor* m_TempJob; bool m_LoadFlag; HANDLE m_LoadThead; string m_FilePath; HANDLE m_SavePreJobThread; map m_LoadProgressInfoMap; static CRITICAL_SECTION m_LoadInfoCS; static float m_LoadProgress; //float m_ProgressValue; };