You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

449 lines
11 KiB
C++

// ServerMgr.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
#include "stdafx.h"
#include "ServerMgr.h"
#include "LogMgr.h"
#include "GlobalFunction.h"
#define RCVFILEBUFLEN 1024 * 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CServerMgr * gServer = new CServerMgr;
// CServerMgr
vector<CServerMgr *> CServerMgr::ServerVec;
CServerMgr::CServerMgr()
{
}
CServerMgr::~CServerMgr()
{
}
bool CServerMgr::StartServer(int ListenPort)
{
if (INVALID_SOCKET != m_hSocket)
Close();
if (!Create(ListenPort, SOCK_STREAM))
return false;
if (!Listen())
return false;
return true;
}
bool CServerMgr::StopServer()
{
int cnt = ServerVec.size();
CServerMgr * p = NULL;
for (int i = 0;i != cnt;i++)
{
auto iter = ServerVec.begin();
p = *iter;
ServerVec.erase(iter);
p->Close();
delete p;
p = NULL;
}
Close();
return false;
}
void CServerMgr::BroadCast(CString msg)
{
auto iter = ServerVec.begin();
auto iter_e = ServerVec.end();
for (;iter!=iter_e;iter++)
{
(*iter)->Send(msg, msg.GetLength());
}
}
void CServerMgr::OnAccept(int nErrorCode)
{
TRACE("CServerSock::OnAccept(int nErrorCode) \n");
if (0 == nErrorCode)
{
CServerMgr* pNewConn = new CServerMgr;
Accept(*pNewConn);
ServerVec.push_back(pNewConn);
CString strip("");
UINT nPort = 0;
pNewConn->GetPeerName(strip, nPort);
CString strPortIP;
strPortIP.Format("<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>%s:%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!", strip, nPort);
if (gLogMgr->IsDebuging())
{
//AfxMessageBox(strPortIP);
}
}
CSocket::OnAccept(nErrorCode);
}
void CServerMgr::OnClose(int nErrorCode)
{
TRACE("CConnectSock::OnClose(int nErrorCode) \n");
CString strAddr("");
CString strip("");
UINT nPort = 0;
GetPeerName(strip, nPort);
strAddr.Format("<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>%s:%d<>ѶϿ<D1B6><CFBF><EFBFBD><EFBFBD><EFBFBD>!", strip, nPort);
gLogMgr->WriteDebugLog(strAddr);
if (gLogMgr->IsDebuging())
{
AfxMessageBox(strAddr);
}
DeleteClientObject(this);
CSocket::OnClose(nErrorCode);
}
#include "FileMgr.h"
#include "DxfReadMgr.h"
#include "CommonFlowMgr.h"
#include "ObjComponentMgr.h"
void CServerMgr::OnReceive(int nErrorCode)
{
TRACE("CConnectSock::OnReceive(int nErrorCode) \n");
if (0 == nErrorCode)
{
char buf[512] = { 0 };
int nRcved = Receive(buf, sizeof(buf));
if (SOCKET_ERROR != nRcved)
{
CString RcvStr = (CString)buf;
gLogMgr->WriteDebugLog("Receive: " + RcvStr);
if (RcvStr.Find(ACTION_OPENFILE) != -1)//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{
int sPos = RcvStr.ReverseFind('\\');
int ePos1 = RcvStr.ReverseFind('.');
int ePos = RcvStr.GetLength();
CString fileName = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
CString Name = RcvStr.Mid(sPos, ePos1 - sPos);
ASSERT(!fileName.IsEmpty());
CFileMgr fg;
CString dir = fg.GetWorkPath();
CString DestFolder = fg.GetWorkPath() + "\\Cutpar";
CString NewParFilePath = DestFolder + Name + ".par";
CString NewAreFilePath = DestFolder + Name + ".are";
CString PIDeFolder = fg.GetWorkPath() + "\\WorkPar";
CString NewPIFilePath = PIDeFolder + Name + ".txt";
5 years ago
#ifndef DEBUG_lOCAL
CString NetDir = gProgram_SZ_XL->m_NetPath + ":"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#else
CString NetDir = "D:\\<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><EFBFBD><EFBFBD>\\ͬ<EFBFBD>˴<EFBFBD>˫ͷ - <20><><EFBFBD>ξ<EFBFBD>\\LaiPuLaser\\Debug\\TempMarkData";//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
5 years ago
#endif
CString NetparfilePath = NetDir + Name + ".par";
CString NetarefilePath = NetDir + Name + ".are";
CString NetPIfilePath = NetDir + Name + ".txt";
CopyFile(NetparfilePath, NewParFilePath,false);
CopyFile(NetarefilePath, NewAreFilePath, false);
CopyFile(NetPIfilePath, NewPIFilePath, false);
//fileName.MakeLower();
if (fileName.Find("dxf") != -1)
{
gServer->m_RcvFileName = NetDir +"\\"+ fileName;
gDlgSW_XL_Flow->SendMessage(OPEN_FILE, 0, 1);
}
if (fileName.Find("mak") != -1)
{
gServer->m_RcvFileName = NetDir +"\\" +fileName;
gDlgSW_XL_Flow->SendMessage(OPEN_FILE, 0, 0);
}
}
4 years ago
if (RcvStr.Find(ACTION_TANSPRODUCTINFO) != -1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
{
4 years ago
/* CString str = "EXECMD_OK;";
Send(str, str.GetLength());
4 years ago
Receive(&gServer->m_RcvProduct, sizeof(CProduct));*/
gLogMgr->WriteDebugLog(ACTION_TANSPRODUCTINFO + "OK");
if (RcvStr.Find(TRACK_1) != -1)
{
gServer->m_RcvCurTrackIndex = 0;
}
if (RcvStr.Find(TRACK_2) != -1)
{
gServer->m_RcvCurTrackIndex = 1;
}
4 years ago
int spos = 0;
int epos = 0;
CString temp;
vector<double> dvec;
for (int i = 0;i != 6;i++)
{
if ( (spos = RcvStr.Find("[",spos+1))<1|| (epos = RcvStr.Find("]",epos+1))<1)
{
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD>!");
return;
}
temp = RcvStr.Mid(spos+1, epos - spos-1);
dvec.push_back(atof(temp));
}
gServer->m_RcvProduct.m_p00 = dvec[0];
gServer->m_RcvProduct.m_p01 = dvec[1];
gServer->m_RcvProduct.m_p02 = dvec[2];
gServer->m_RcvProduct.m_p10 = dvec[3];
gServer->m_RcvProduct.m_p11 = dvec[4];
gServer->m_RcvProduct.m_p12 = dvec[5];
//gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End);
gTrackWorkFlow1.MarkProcessExt();
4 years ago
if (!m_bLogicErr )
{
CString str = "EXECMD_OK;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("Send: " + str);
}
return CSocket::OnReceive(nErrorCode);
}
4 years ago
if (RcvStr.Find(ACTION_COLLECT) != -1) //<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>.
{
gServer->m_bLogicErr = true;
4 years ago
gMarkAreaMgr->CollectOrgWorkData(gProgram_SZ_XL->IsbSelMarkMode(), gServer->m_RcvProduct);
gLogMgr->WriteDebugLog(ACTION_COLLECT + "OK");
}
if (RcvStr.Find(ACTION_STARTWORK) != -1) //<2F><><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>
4 years ago
{
if (m_bLogicErr)
return CSocket::OnReceive(nErrorCode);
int sPos = RcvStr.ReverseFind(';');
int ePos = RcvStr.GetLength();
CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
4 years ago
m_RcvAreaIndex = atoi(Index);
/* StartMarkArea();
}*/
gCommonFlowMgr->MarkAreaByIdx(m_RcvAreaIndex);//<2F><><EFBFBD>ݼӹ<DDBC><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>
4 years ago
gLogMgr->WriteDebugLog("MarkArea " + Index + " Finished!");
CString str = "AREA_FINISHED;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("Send: " + str);
Sleep(50);
}
if (RcvStr.Find(ACTION_PAUSEWORK) != -1) //<2F><>ͣ<EFBFBD>ӹ<EFBFBD>
{
PauseMark();
}
if (RcvStr.Find(ACTION_RESUMEWORK) != -1) //<2F>ָ<EFBFBD><D6B8>ӹ<EFBFBD>
{
ResumeMark();
}
if (RcvStr.Find(ACTION_EXITWORK) != -1) //<2F>˳<EFBFBD><CBB3>ӹ<EFBFBD>
{
ExitMark();
}
if (RcvStr.Find(ACTION_SETSPECAILOBJ) != -1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CString str = "EXECMD_OK;";
Send(str, str.GetLength());
int sPos = RcvStr.ReverseFind(';');
int ePos = RcvStr.GetLength();
CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
int arryCnt = atoi(Index);
gLogMgr->WriteDebugLog(to_string(arryCnt).c_str());
int *RcvObjIndexArry = new int[arryCnt]();
Sleep(100);
int rcvcnt=Receive(RcvObjIndexArry, arryCnt*(sizeof(int)));
if (rcvcnt!= arryCnt*(sizeof(int)))
{
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Obj<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.");
}
int idx;
auto & ComponentVec = gObjComponentMgr->GetComponentVec();
int ComponentVecSize = ComponentVec.size();
for (int i = 0; i < arryCnt;i++)
{
idx = RcvObjIndexArry[i];
if (idx>= (ComponentVecSize)||idx<0)
{
CString str;
str.Format("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ֵΪ%d<><64>", i, idx);
gLogMgr->WriteDebugLog(str);
continue;
}
ComponentVec[idx].SetSelected(true);
}
gObjComponentMgr->SetSelObjPenNum();
gLogMgr->WriteDebugLog(ACTION_SETSPECAILOBJ + "OK");
delete[]RcvObjIndexArry;
RcvObjIndexArry = NULL;
}
if (RcvStr.Find(ACTION_BMARKSELOBJMODE) != -1) //<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ӹ<EFBFBD>ģʽ
{
if (RcvStr.Find("0") != -1)
{
gProgram_SZ_XL->SetbSelMarkMode(false);
}
if (RcvStr.Find("1") != -1)
{
gProgram_SZ_XL->SetbSelMarkMode(true);
}
/*int sPos = RcvStr.ReverseFind(';');
int ePos = RcvStr.GetLength();
CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
int arryCnt = atoi(Index);
gLogMgr->WriteDebugLog(to_string(arryCnt).c_str());
int *RcvObjIndexArry = new int[arryCnt]();
Sleep(100);
int rcvcnt = Receive(RcvObjIndexArry, arryCnt*(sizeof(int)));
if (rcvcnt != arryCnt*(sizeof(int)))
{
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Obj<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
int idx;
auto & ComponentVec = gObjComponentMgr->GetComponentVec();
int ComponentVecSize = ComponentVec.size();
for (int i = 0; i < arryCnt; i++)
{
idx = RcvObjIndexArry[i];
if (idx >= (ComponentVecSize) || idx < 0)
{
CString str;
str.Format("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ֵΪ%d<><64>", i, idx);
gLogMgr->WriteDebugLog(str);
continue;
}
ComponentVec[idx].SetSelected(true);
}
gObjComponentMgr->SetSelObjPenNum();
gLogMgr->WriteDebugLog(ACTION_SETSPECAILOBJ + "OK");
delete[]RcvObjIndexArry;
RcvObjIndexArry = NULL;*/
}
if (RcvStr.Find(ACTION_SELECTOBJ) != -1) //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>е<EFBFBD>OBJ
{
CString str = "EXECMD_OK;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("ACTION_SELECTOBJ START!");
int sPos = RcvStr.ReverseFind(';');
int ePos = RcvStr.GetLength();
CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
int arryCnt = atoi(Index); //<2F>ͻ<EFBFBD><CDBB>˸<EFBFBD>֪<EFBFBD><D6AA>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gLogMgr->WriteDebugLog(to_string(arryCnt).c_str());
gObjComponentMgr->NotSelAllObj();//<2F><>ȫ<EFBFBD><C8AB>ȡ<EFBFBD><C8A1>ѡ<EFBFBD><D1A1>
if (arryCnt==0) //û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
{
GetCurViewPtr()->RefreshView();
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int *RcvObjIndexArry = new int[arryCnt](); //<2F><>Ҫѡ<D2AA><D1A1><EFBFBD><EFBFBD>Obj<62><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sleep(100);
int rcvcnt = Receive(RcvObjIndexArry, arryCnt*(sizeof(int)));
if (rcvcnt != arryCnt*(sizeof(int)))
{
gLogMgr->WriteDebugLog("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Obj<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
//<2F><><EFBFBD><EFBFBD>Ӧ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
int idx;
auto & ComponentVec = gObjComponentMgr->GetComponentVec();
int ComponentVecSize = ComponentVec.size();
for (int i = 0; i < arryCnt; i++)
{
idx = RcvObjIndexArry[i];
if (idx >= (ComponentVecSize) || idx < 0)
{
CString str;
str.Format("<EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ֵΪ%d<><64>", i, idx);
gLogMgr->WriteDebugLog(str);
continue;
}
ComponentVec[idx].SetSelected(true);
}
gLogMgr->WriteDebugLog(ACTION_SELECTOBJ + "OK");
GetCurViewPtr()->RefreshView();
delete[]RcvObjIndexArry;
RcvObjIndexArry = NULL;
}
}
}
CString str = "EXECMD_OK;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("Send: " + str);
CSocket::OnReceive(nErrorCode);
}
void CServerMgr::DeleteClientObject(CServerMgr * pConn)
{
int cnt = ServerVec.size();
for (int i = 0;i != cnt;i++)
{
if (ServerVec[i] == pConn)
{
ServerVec.erase(ServerVec.begin() + i);
//pConn->Close();
delete pConn;
pConn = NULL;
break;
}
}
}
4 years ago
void CServerMgr::StartMarkArea()
{
if (m_workThread.joinable())
{
return;
}
m_workThread=thread(&CCommonFlowMgr::MarkAreaByIdx, gCommonFlowMgr,m_RcvAreaIndex);//<2F><><EFBFBD>ݼӹ<DDBC><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>)
//gCommonFlowMgr->gCommonFlowMgr->MarkAreaByIdx(m_RcvAreaIndex);//<2F><><EFBFBD>ݼӹ<DDBC><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>(m_RcvAreaIndex);//<2F><><EFBFBD>ݼӹ<DDBC><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>
m_workThread.join();
gLogMgr->WriteDebugLog("MarkArea " +(CString) (to_string(m_RcvAreaIndex).c_str()) + " Finished!");
CString str = "AREA_FINISHED;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("Send: " + str);
Sleep(50);
}
void CServerMgr::PauseMark()
{
SuspendThread(m_workThread.native_handle());
}
void CServerMgr::ResumeMark()
{
ResumeThread(m_workThread.native_handle());
}
void CServerMgr::ExitMark()
{
TerminateThread(m_workThread.native_handle(),0);
}