#include "stdafx.h" #include "LNBuffer.h" #include #include #include "LNContext.h" CLNBuffer::CLNBuffer() { } CLNBuffer::~CLNBuffer() { } int CLNBuffer::HasPack() { if (m_nPos < 4) return 0; int i, nStart = -1; //find pack head for (i = 0; i < m_nPos - 1; i++) { if (m_pBuffer[i] == '{') { nStart = i; break; } } if (nStart == -1) { CString imei; if (pContext) if (((CLNContext*)pContext)->m_mapImei.size()) imei = ((CLNContext*)pContext)->m_mapImei.begin()->first; CSimpleLog::Error(fmt::format("[设备]{}未找到7B丢弃数据{}:({}){}", imei, m_nPos, CString((char*)m_pBuffer, m_nPos), CSimpleLog::GetHexString(m_pBuffer, m_nPos)).c_str()); m_nPos = 0; return 0; } else if (nStart > 0) { CString imei; if (pContext) if (((CLNContext*)pContext)->m_mapImei.size()) imei = ((CLNContext*)pContext)->m_mapImei.begin()->first; CSimpleLog::Error(fmt::format("[设备]{}找到7B丢弃7B之前的数据{}:({}){}", imei, nStart, CString((char*)m_pBuffer, nStart), CSimpleLog::GetHexString(m_pBuffer, nStart)).c_str()); m_nPos -= nStart; memmove(m_pBuffer, m_pBuffer + nStart, m_nPos); nStart = 0; } int nlen = 0; //find pack tail for (i = 1; i < m_nPos; i++) { if (m_pBuffer[i] == '{') { CString imei; if (pContext) if (((CLNContext*)pContext)->m_mapImei.size()) imei = ((CLNContext*)pContext)->m_mapImei.begin()->first; CSimpleLog::Error(fmt::format("[设备]{}找7D丢弃7B之前的数据{}:({}){}", imei, i, CString((char*)m_pBuffer, i), CSimpleLog::GetHexString(m_pBuffer, i)).c_str()); m_nPos -= i; memmove(m_pBuffer, m_pBuffer + i, m_nPos); nStart = 0; return 0; } if (m_pBuffer[i] == '}') { nlen = i + 1; return nlen; } } return nlen; }