GrpcPrint/PrintS/job/JobController.h

108 lines
3.0 KiB
C
Raw Normal View History

2024-07-04 15:22:11 +08:00
#pragma once
#include "../stdafx.h"
#include <list>
#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<Item>& lst = list<Item>(), ::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<Item>& 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<Item>& 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<LoadProgressInfoFlag, TrText*> m_LoadProgressInfoMap;
static CRITICAL_SECTION m_LoadInfoCS;
static float m_LoadProgress;
//float m_ProgressValue;
};