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.

357 lines
9.0 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><EFBFBD><EFBFBD>˫ͷ(20200519)\\LaiPuLaser\\Debug\\TempMarkData\\";//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#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);
}
}
if (RcvStr.Find(ACTION_TANSPRODUCTINFO) != -1) //<2F>ȸ<EFBFBD>֪<EFBFBD><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ٴ<EFBFBD><D9B4><EFBFBD><EFBFBD><EFBFBD>.
{
CString str = "EXECMD_OK;";
Send(str, str.GetLength());
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;
}
gTrackWorkFlow1.SetCurTrackWorkStep(_ETrack_Step_Catch_mark_End);
}
if (RcvStr.Find(ACTION_STARTWORK) != -1) //<2F><><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>
{
int sPos = RcvStr.ReverseFind(';');
int ePos = RcvStr.GetLength();
CString Index = RcvStr.Mid(sPos + 1, ePos - sPos - 1);
m_RcvAreaIndex = atoi(Index);
gCommonFlowMgr->MarkAreaByIdx(m_RcvAreaIndex);//<2F><><EFBFBD>ݼӹ<DDBC><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>
gLogMgr->WriteDebugLog("MarkArea " + Index + " Finished!");
CString str = "AREA_FINISHED;";
Send(str, str.GetLength());
gLogMgr->WriteDebugLog("Send: " + str);
Sleep(50);
}
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><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;
}
}
}