|
|
|
|
// 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";
|
|
|
|
|
|
|
|
|
|
#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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|