661 lines
16 KiB
C++
661 lines
16 KiB
C++
|
#include "BaseClient.h"
|
|||
|
//#include "S7Command.h"
|
|||
|
#include "../global.h"
|
|||
|
#include "../Config/ConfigManager.h"
|
|||
|
|
|||
|
BaseClient::BaseClient()
|
|||
|
:m_Thread(INVALID_HANDLE_VALUE)
|
|||
|
,m_RunFlag(false)
|
|||
|
//, m_interval(500)
|
|||
|
{
|
|||
|
InitializeCriticalSection(&m_ValueCS);
|
|||
|
InitializeCriticalSection(&m_RtcCS);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BaseClient::~BaseClient()
|
|||
|
{
|
|||
|
//EnterCriticalSection(&m_RtcCS);
|
|||
|
//while (!m_RTCommands.empty())
|
|||
|
//{
|
|||
|
// Command* pcommand = m_RTCommands.front();
|
|||
|
// delete pcommand;
|
|||
|
// pcommand = NULL;
|
|||
|
// m_RTCommands.pop();
|
|||
|
//}
|
|||
|
//LeaveCriticalSection(&m_RtcCS);
|
|||
|
//while (!m_CycleCommands.empty()) {
|
|||
|
// Command* pcommand = m_CycleCommands.back();
|
|||
|
// delete pcommand;
|
|||
|
// pcommand = NULL;
|
|||
|
// m_CycleCommands.pop_back();
|
|||
|
//}
|
|||
|
|
|||
|
EnterCriticalSection(&m_ValueCS);
|
|||
|
for (auto item = m_baseMp.begin(); item != m_baseMp.end(); ++item) {
|
|||
|
delete item->second;
|
|||
|
}
|
|||
|
m_baseMp.clear();
|
|||
|
LeaveCriticalSection(&m_ValueCS);
|
|||
|
|
|||
|
DeleteCriticalSection(&m_ValueCS);
|
|||
|
DeleteCriticalSection(&m_RtcCS);
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void BaseClient::Startup()
|
|||
|
{
|
|||
|
m_RunFlag = true;
|
|||
|
m_Thread = AtlCreateThread(ThreadProc, this);
|
|||
|
}
|
|||
|
|
|||
|
void BaseClient::Shutdown()
|
|||
|
{
|
|||
|
m_RunFlag = false;
|
|||
|
if (m_Thread != INVALID_HANDLE_VALUE)
|
|||
|
{
|
|||
|
if (WaitForSingleObject(m_Thread, 1000) == WAIT_TIMEOUT) {
|
|||
|
TerminateThread(m_Thread, 1);
|
|||
|
}
|
|||
|
CloseHandle(m_Thread);
|
|||
|
m_Thread = INVALID_HANDLE_VALUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void BaseClient::SetRunFlag(bool runflag)
|
|||
|
{
|
|||
|
m_RunFlag = runflag;
|
|||
|
}
|
|||
|
|
|||
|
DWORD WINAPI BaseClient::ThreadProc(BaseClient* pclient)
|
|||
|
{
|
|||
|
//if (pclient) {
|
|||
|
// pclient->RunProc();
|
|||
|
//}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
//void BaseClient::ClearCycleCommand()
|
|||
|
//{
|
|||
|
// if (m_Thread != INVALID_HANDLE_VALUE)return;
|
|||
|
// while (!m_CycleCommands.empty())
|
|||
|
// {
|
|||
|
// Command* command = m_CycleCommands.back();
|
|||
|
// m_CycleCommands.pop_back();
|
|||
|
// delete command;
|
|||
|
// }
|
|||
|
// m_CycleCommands.clear();
|
|||
|
//}
|
|||
|
|
|||
|
//Command* BaseClient::GetSendCycleCommand()
|
|||
|
//{
|
|||
|
// Command* command = NULL;
|
|||
|
// for (size_t i = 0; i < m_CycleCommands.size(); ++i) {
|
|||
|
// if (!m_CycleCommands[i]->isFinished)
|
|||
|
// {
|
|||
|
// command = m_CycleCommands[i];
|
|||
|
// break;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// return command;
|
|||
|
//}
|
|||
|
|
|||
|
//void BaseClient::UpdateCycleCommands()
|
|||
|
//{
|
|||
|
// uint64_t currentTickcount = GetTickCount64();
|
|||
|
// uint64_t dif = currentTickcount - m_LastCycleTickcount;
|
|||
|
// if (dif < GetInterval())return;
|
|||
|
// m_LastCycleTickcount = currentTickcount;
|
|||
|
//
|
|||
|
// bool isAllFinished = true;
|
|||
|
// for (size_t i = 0; i < m_CycleCommands.size(); ++i) {
|
|||
|
// if (!m_CycleCommands[i]->isFinished) {
|
|||
|
// isAllFinished = false;
|
|||
|
// break;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// if (isAllFinished)
|
|||
|
// {
|
|||
|
// for (size_t i = 0; i < m_CycleCommands.size(); ++i) {
|
|||
|
// m_CycleCommands[i]->isFinished = false;
|
|||
|
// }
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
void BaseClient::InsertMp(void* startPtr, size_t count, const string& suff) {
|
|||
|
size_t ptrSize = sizeof(nullptr); //指针大小
|
|||
|
for (size_t i = 0; i < count; ++i) {
|
|||
|
BaseData* bd = *((BaseData**)((char*)startPtr + ptrSize * i));
|
|||
|
string key = bd->GetCode() + suff;
|
|||
|
if (m_baseMp.find(key) != m_baseMp.end()) {
|
|||
|
printf("%s is repeated...\n", key.data());
|
|||
|
}
|
|||
|
else { m_baseMp.insert(make_pair(key, bd)); }
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void BaseClient::UpdateData(const ReadData& msg) {
|
|||
|
|
|||
|
for (auto start = msg.its.begin(); start != msg.its.end(); ++start) {
|
|||
|
if (start->valueType == iFLOAT) {
|
|||
|
float val = (float)atof(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iBOOL) {
|
|||
|
bool val = (bool)atoi(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iSHORT) {
|
|||
|
short val = (short)atoi(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iUSHORT) {
|
|||
|
unsigned short val = (unsigned short)atoi(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iINT) {
|
|||
|
int val = atoi(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iUCHAR) {
|
|||
|
unsigned char val = (unsigned char)atoi(start->strValue.data());
|
|||
|
m_baseMp[start->nameKey]->SetValue(val);
|
|||
|
}
|
|||
|
else if (start->valueType == iSTRING) {
|
|||
|
m_baseMp[start->nameKey]->SetValue(start->strValue);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
S7Client::S7Client(void* pconfig)
|
|||
|
:m_S7Client(nullptr)
|
|||
|
//,m_Config(pconfig)
|
|||
|
, m_WriteTimeout(1000)
|
|||
|
,m_ReadTimeout(2000)
|
|||
|
, m_LocalTsap(0x0200)
|
|||
|
,m_RemoteTsap(0x0200)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
S7Client::~S7Client() {
|
|||
|
Shutdown();
|
|||
|
if (m_S7Client)
|
|||
|
{
|
|||
|
delete m_S7Client;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void S7Client::Shutdown()
|
|||
|
{
|
|||
|
//BaseClient::Shutdown();
|
|||
|
//if (m_S7Client && m_S7Client->Connected)m_S7Client->Disconnect();
|
|||
|
}
|
|||
|
|
|||
|
void S7Client::Init()
|
|||
|
{
|
|||
|
// m_S7Client = new TSnap7Client();
|
|||
|
// m_S7Client->SetConnectionParams(m_Config->m_IP.c_str(), 0x0200, 0x0200);
|
|||
|
// int sendtimeout = m_WriteTimeout;
|
|||
|
// int readtimeout = m_ReadTimeout;
|
|||
|
// int pdusize = 800;
|
|||
|
// m_S7Client->SetParam(p_i32_PDURequest, &pdusize);
|
|||
|
// m_S7Client->SetParam(p_i32_SendTimeout, &sendtimeout);
|
|||
|
// m_S7Client->SetParam(p_i32_RecvTimeout, &readtimeout);
|
|||
|
//#ifdef _DEBUG
|
|||
|
// int pingTimeout = 0;
|
|||
|
// m_S7Client->SetParam(p_i32_PingTimeout, &pingTimeout);
|
|||
|
//#endif
|
|||
|
// InitCommand();
|
|||
|
}
|
|||
|
|
|||
|
//void S7Client::RunProc()
|
|||
|
//{
|
|||
|
// while (m_RunFlag)
|
|||
|
// {
|
|||
|
// if (!m_S7Client->Connected) {
|
|||
|
//
|
|||
|
// m_S7Client->SetConnectionParams(m_Config->m_IP.c_str(), 0x0200, 0x0200);
|
|||
|
// int rel = m_S7Client->Connect();
|
|||
|
//
|
|||
|
// if (rel != 0) {
|
|||
|
// int count = 0;
|
|||
|
// while (m_RunFlag && (count < 5)) {
|
|||
|
// Sleep(100);
|
|||
|
// count++;
|
|||
|
// }
|
|||
|
// continue;
|
|||
|
// }
|
|||
|
//
|
|||
|
// }
|
|||
|
// Command* pCommand = NULL;
|
|||
|
// EnterCriticalSection(&m_RtcCS);
|
|||
|
// if (!m_RTCommands.empty()) {
|
|||
|
// pCommand = m_RTCommands.front();
|
|||
|
// S7Command* ps7 = (S7Command*)pCommand;
|
|||
|
// if (ps7->m_waitTime > 0) {
|
|||
|
// uint64_t nowtick = GetTickCount64();
|
|||
|
// if ((nowtick - ps7->m_CreateTime) > ps7->m_waitTime) {
|
|||
|
// m_RTCommands.pop();
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// pCommand = NULL;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// m_RTCommands.pop();
|
|||
|
// }
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_RtcCS);
|
|||
|
//
|
|||
|
// if (pCommand == NULL) {
|
|||
|
// pCommand = GetSendCycleCommand();
|
|||
|
// }
|
|||
|
// if (pCommand != NULL) {
|
|||
|
//
|
|||
|
// switch (pCommand->m_id)
|
|||
|
// {
|
|||
|
// case S7_COMMAND_READ_INFO:
|
|||
|
// {
|
|||
|
// S7Command* ps7 = (S7Command*)pCommand;
|
|||
|
// TS7DataItem* items = ps7->getDataItems();
|
|||
|
// int rel = m_S7Client->ReadMultiVars(items, ps7->getItemCount());
|
|||
|
// if (rel == 0)
|
|||
|
// {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag = 0;
|
|||
|
// m_BaseStat.isConnected = true;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
// if (ps7->m_Fun)ps7->m_Fun(ps7->m_Ref, ps7);
|
|||
|
// }
|
|||
|
// else if (rel == errIsoRecvPacket) {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag++;
|
|||
|
// if (m_BaseStat.readTimeoutFlag >= m_Config->m_AlarmTimeoutTimes) {
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// m_S7Client->Disconnect();
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag = 0;
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// m_S7Client->Disconnect();
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
// }
|
|||
|
// }break;
|
|||
|
// case S7_COMMAND_WRITE:
|
|||
|
// {
|
|||
|
// S7Command* ps7 = (S7Command*)pCommand;
|
|||
|
// TS7DataItem* items = ps7->getDataItems();
|
|||
|
// //TS7DataItem item = items[0];
|
|||
|
// if (ps7->m_PreWrite)ps7->m_PreWrite(ps7->m_Ref, ps7);
|
|||
|
// unsigned int itemCount = ps7->getItemCount();
|
|||
|
// int rel = m_S7Client->WriteMultiVars(items, itemCount);
|
|||
|
//
|
|||
|
// if (rel == 0)
|
|||
|
// {
|
|||
|
// if (ps7->m_Fun)ps7->m_Fun(ps7->m_Ref, ps7);
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// m_S7Client->Disconnect();
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
// }
|
|||
|
//
|
|||
|
// }break;
|
|||
|
// }
|
|||
|
// pCommand->isFinished = true;
|
|||
|
// if (pCommand->isNeedDel)delete pCommand;
|
|||
|
// }
|
|||
|
// UpdateCycleCommands();
|
|||
|
// Sleep(50);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
ComClient::ComClient(void* cfg)
|
|||
|
:/*m_Config(cfg)
|
|||
|
,*/m_Freq(50)
|
|||
|
,m_ReadTimeout(500)
|
|||
|
,m_WriteTimeout(250)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
ComClient::~ComClient() {
|
|||
|
Shutdown();
|
|||
|
}
|
|||
|
|
|||
|
void ComClient::Shutdown()
|
|||
|
{
|
|||
|
BaseClient::Shutdown();
|
|||
|
if (m_ComClient.IsOpen())m_ComClient.Close();
|
|||
|
}
|
|||
|
|
|||
|
void ComClient::Init()
|
|||
|
{
|
|||
|
//InitCommand();
|
|||
|
//InitSerialPort();
|
|||
|
}
|
|||
|
|
|||
|
void ComClient::InitSerialPort()
|
|||
|
{
|
|||
|
//m_ComClient.Close();
|
|||
|
//try {
|
|||
|
// m_ComClient.Open(m_Config->m_COM.c_str(), m_Config->m_BaudRate, CSerialPort2::Parity(m_Config->m_Parity),m_Config->m_DataBits, CSerialPort2::StopBits(m_Config->m_StopBits-1));
|
|||
|
//}
|
|||
|
//catch (CSerialException& cse) {
|
|||
|
// (void)cse;
|
|||
|
//}
|
|||
|
if (m_ComClient.IsOpen()) {
|
|||
|
COMMTIMEOUTS timeouts = { 0 };
|
|||
|
m_ComClient.GetTimeouts(timeouts);
|
|||
|
//timeouts.ReadIntervalTimeout = 50;
|
|||
|
timeouts.ReadIntervalTimeout = 0L;
|
|||
|
timeouts.ReadTotalTimeoutMultiplier = 0L;
|
|||
|
timeouts.ReadTotalTimeoutConstant = m_ReadTimeout;
|
|||
|
timeouts.WriteTotalTimeoutConstant = m_WriteTimeout;
|
|||
|
timeouts.WriteTotalTimeoutMultiplier = 0L;
|
|||
|
m_ComClient.SetTimeouts(timeouts);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//void ComClient::RunProc()
|
|||
|
//{
|
|||
|
// unsigned char sendBuffer[1024];
|
|||
|
// unsigned char recvBuffer[1024];
|
|||
|
// while (m_RunFlag) {
|
|||
|
// if (!m_ComClient.IsOpen())
|
|||
|
// {
|
|||
|
// InitSerialPort();
|
|||
|
// if (!m_ComClient.IsOpen()) {
|
|||
|
// ServerDisconnectProc();
|
|||
|
// int count = 0;
|
|||
|
// while ((count < 10) && m_RunFlag) {
|
|||
|
// Sleep(100);
|
|||
|
// count++;
|
|||
|
// }
|
|||
|
// continue;
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// ServerConnectedProc();
|
|||
|
// }
|
|||
|
// }
|
|||
|
// CycleBegin();
|
|||
|
// Command* pCommand = NULL;
|
|||
|
// EnterCriticalSection(&m_RtcCS);
|
|||
|
// if (!m_RTCommands.empty()) {
|
|||
|
// pCommand = m_RTCommands.front();
|
|||
|
// m_RTCommands.pop();
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_RtcCS);
|
|||
|
//
|
|||
|
// if (pCommand == NULL) {
|
|||
|
// pCommand = GetSendCycleCommand();
|
|||
|
// }
|
|||
|
// if (pCommand != NULL) {
|
|||
|
// if (pCommand->isNeedSend) {
|
|||
|
// int bytecount = pCommand->GetRequestSequence(sendBuffer);
|
|||
|
// DWORD wlength = 0;
|
|||
|
// m_ComClient.ClearReadBuffer();
|
|||
|
// m_ComClient.ClearWriteBuffer();
|
|||
|
// m_ComClient.Write(sendBuffer, bytecount, wlength);
|
|||
|
// if (wlength > 0L) {
|
|||
|
// WriteSuccessProc(wlength, sendBuffer, pCommand);
|
|||
|
// if (pCommand->isNeedRead) {
|
|||
|
// DWORD rlength = 0L;
|
|||
|
// memset(recvBuffer, 0, sizeof(recvBuffer));
|
|||
|
// m_ComClient.Read(recvBuffer, pCommand->ConstReturnSize(), rlength);
|
|||
|
// if (rlength > 0L) {
|
|||
|
// ReadSuccessProc(rlength, recvBuffer, pCommand);
|
|||
|
// if (pCommand->Verify(recvBuffer, rlength))
|
|||
|
// {
|
|||
|
// pCommand->m_RespSeq = recvBuffer;
|
|||
|
// pCommand->m_RespLen = rlength;
|
|||
|
// if (pCommand->m_Fun)pCommand->m_Fun(pCommand->m_Ref, pCommand);
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// VerifyFaild(pCommand);
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else if (rlength == 0L) {
|
|||
|
// //timeout
|
|||
|
// ReadTimeoutProc(pCommand);
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// m_ComClient.Close();
|
|||
|
// //g_log->TraceError("comclient close");
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }
|
|||
|
// else if (wlength == 0L) {
|
|||
|
// //timeout
|
|||
|
// WriteTimeoutProc(pCommand);
|
|||
|
// }
|
|||
|
// else {
|
|||
|
// //error
|
|||
|
// m_ComClient.Close();
|
|||
|
// //g_log->TraceError("comclient close");
|
|||
|
// }
|
|||
|
// }
|
|||
|
//
|
|||
|
// pCommand->isFinished = true;
|
|||
|
// if (pCommand->isNeedDel) {
|
|||
|
// delete pCommand;
|
|||
|
// pCommand = NULL;
|
|||
|
// }
|
|||
|
// }
|
|||
|
// UpdateCycleCommands();
|
|||
|
// Sleep(m_Freq);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//void ComClient::ServerDisconnectProc() {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void ComClient::WriteSuccessProc(int wlength, unsigned char* buffer, Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.writeTimeoutFlag = 0;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
//void ComClient::WriteTimeoutProc(Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.writeTimeoutFlag++;
|
|||
|
// if (m_BaseStat.writeTimeoutFlag >= m_Config->m_AlarmTimeoutTimes) {
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void ComClient::ReadTimeoutProc(Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag++;
|
|||
|
// if (m_BaseStat.readTimeoutFlag >= m_Config->m_AlarmTimeoutTimes) {
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void ComClient::ReadSuccessProc(int rlength, unsigned char* buffer, Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag = 0;
|
|||
|
// m_BaseStat.isConnected = true;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
TcpClient::TcpClient(void* pconfig, int freq)
|
|||
|
:/*m_Config(pconfig)
|
|||
|
,*/ m_Freq(freq)
|
|||
|
, m_ReadTimeout(500)
|
|||
|
, m_WriteTimeout(250)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
TcpClient::~TcpClient()
|
|||
|
{
|
|||
|
Shutdown();
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void TcpClient::Init()
|
|||
|
{
|
|||
|
//m_interval = m_Config->m_interval;
|
|||
|
//InitCommand();
|
|||
|
}
|
|||
|
|
|||
|
//void TcpClient::RunProc()
|
|||
|
//{
|
|||
|
// unsigned char sendBuffer[1024];
|
|||
|
// unsigned char recvBuffer[1024];
|
|||
|
// //while (m_RunFlag) {
|
|||
|
// // if (!m_Client.IsOpen()) {
|
|||
|
// // if (!m_Client.ConnectTo(m_Config->m_IP.c_str(), m_Config->m_Port, AF_INET, SOCK_STREAM, 500)) {
|
|||
|
// // if (!m_RunFlag)break;
|
|||
|
// // ServerDisconnectProc();
|
|||
|
// // int count = 0;
|
|||
|
// // while ((count < 10) && m_RunFlag) {
|
|||
|
// // Sleep(100);
|
|||
|
// // count++;
|
|||
|
// // }
|
|||
|
// // if (!m_RunFlag)break;
|
|||
|
// // continue;
|
|||
|
// // }
|
|||
|
// // else {
|
|||
|
// // ServerConnectedProc();
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
// // CycleBegin();
|
|||
|
//
|
|||
|
// // Command* pCommand = NULL;
|
|||
|
// // EnterCriticalSection(&m_RtcCS);
|
|||
|
// // if (!m_RTCommands.empty()) {
|
|||
|
// // pCommand = m_RTCommands.front();
|
|||
|
// // m_RTCommands.pop();
|
|||
|
// // }
|
|||
|
// // LeaveCriticalSection(&m_RtcCS);
|
|||
|
//
|
|||
|
// // if (pCommand == NULL) {
|
|||
|
// // pCommand = GetSendCycleCommand();
|
|||
|
// // }
|
|||
|
// // if (pCommand != NULL) {
|
|||
|
// // if (pCommand->isNeedSend) {
|
|||
|
// // int bytecount = pCommand->GetRequestSequence(sendBuffer);
|
|||
|
// // int wlength = 0;
|
|||
|
// // m_Client.Read(recvBuffer, sizeof(recvBuffer), NULL, 10);
|
|||
|
//
|
|||
|
// // wlength = m_Client.Write(sendBuffer, bytecount, NULL, 500);
|
|||
|
// // if (wlength > 0) {
|
|||
|
// // WriteSuccessProc(wlength, sendBuffer, pCommand);
|
|||
|
// // if (pCommand->isNeedRead) {
|
|||
|
// // int rlength = 0;
|
|||
|
// // memset(recvBuffer, 0, sizeof(recvBuffer));
|
|||
|
// // rlength = m_Client.Read(recvBuffer, sizeof(recvBuffer), NULL, 500);
|
|||
|
// // if (rlength > 0) {
|
|||
|
// // ReadSuccessProc(rlength, recvBuffer, pCommand);
|
|||
|
// // if (pCommand->Verify(recvBuffer, rlength))
|
|||
|
// // {
|
|||
|
// // pCommand->m_RespSeq = recvBuffer;
|
|||
|
// // pCommand->m_RespLen = rlength;
|
|||
|
// // if (pCommand->m_Fun)pCommand->m_Fun(pCommand->m_Ref, pCommand);
|
|||
|
// // }
|
|||
|
// // else {
|
|||
|
// // VerifyFaild(pCommand);
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
// // else if (rlength == 0) {
|
|||
|
// // //timeout
|
|||
|
// // ReadTimeoutProc(pCommand);
|
|||
|
// // }
|
|||
|
// // else {
|
|||
|
// // m_Client.Close();
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
// // else if (wlength == 0) {
|
|||
|
// // //timeout
|
|||
|
// // WriteTimeoutProc(pCommand);
|
|||
|
// // }
|
|||
|
// // else {
|
|||
|
// // //error
|
|||
|
// // m_Client.Close();
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
//
|
|||
|
// // pCommand->isFinished = true;
|
|||
|
// // if (pCommand->isNeedDel) {
|
|||
|
// // delete pCommand;
|
|||
|
// // pCommand = NULL;
|
|||
|
// // }
|
|||
|
// // }
|
|||
|
// // UpdateCycleCommands();
|
|||
|
// // Sleep(m_Freq);
|
|||
|
// //}
|
|||
|
//}
|
|||
|
|
|||
|
//void TcpClient::ServerDisconnectProc() {
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void TcpClient::WriteSuccessProc(int wlength, unsigned char* buffer, Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.writeTimeoutFlag = 0;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
//void TcpClient::WriteTimeoutProc(Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.writeTimeoutFlag++;
|
|||
|
// if (m_BaseStat.writeTimeoutFlag >= m_Config->m_AlarmTimeoutTimes) {
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void TcpClient::ReadTimeoutProc(Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag++;
|
|||
|
// if (m_BaseStat.readTimeoutFlag >= m_Config->m_AlarmTimeoutTimes) {
|
|||
|
// m_BaseStat.isConnected = false;
|
|||
|
// }
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
//void TcpClient::ReadSuccessProc(int rlength, unsigned char* buffer, Command* pcommand)
|
|||
|
//{
|
|||
|
// EnterCriticalSection(&m_ValueCS);
|
|||
|
// m_BaseStat.readTimeoutFlag = 0;
|
|||
|
// m_BaseStat.isConnected = true;
|
|||
|
// LeaveCriticalSection(&m_ValueCS);
|
|||
|
//}
|
|||
|
|
|||
|
//void TcpClient::Shutdown()
|
|||
|
//{
|
|||
|
// BaseClient::Shutdown();
|
|||
|
// if (m_Client.IsOpen())m_Client.Close();
|
|||
|
//}
|
|||
|
|
|||
|
|
|||
|
|