📄 eroomnetavi.cpp
字号:
#include "EroomNetAvi.h"
CEroomNetAvi::CEroomNetAvi(int a_QueueFlag, int a_RecvBuffSize) : CWiseNet(a_QueueFlag, 1)
{
mp_RecvBuff = NULL;
m_RecvBuffSize = a_RecvBuffSize;
m_RecvLen = 0;
m_Code[0] = 'A';
m_Code[1] = 'V';
m_Code[2] = '0';
m_Seq = 0;
m_PNum = 0;
}
CEroomNetAvi::~CEroomNetAvi()
{
if(mp_RecvBuff) {
delete mp_RecvBuff;
}
}
int CEroomNetAvi::Send(char *ap_Ip, int a_Port, int a_Cmd, char *ap_Buff, int a_Len)
{
int w_II;
int w_PNum, w_LSize;
EAVI_PACKET w_Packet;
w_PNum = a_Len / EAVI_PACKETDATA_SIZE;
w_LSize = a_Len % EAVI_PACKETDATA_SIZE;
if(w_LSize > 0) {
w_PNum ++;
} else {
w_LSize = EAVI_PACKETDATA_SIZE;
}
for(w_II=0;w_II<w_PNum;w_II++) {
memset(&w_Packet, 0x00, EAVI_PACKETHEAD_SIZE); // 庆歹父 檬扁拳
w_Packet.m_Code[0] = m_Code[0];
w_Packet.m_Code[1] = m_Code[1];
w_Packet.m_Sequence = (w_II % 255) & 0x0ff;
w_Packet.m_Cmd = a_Cmd;
if(w_II == 0) {
w_Packet.m_Check |= EAVI_PACKET_FIRST;
}
if(w_II == w_PNum - 1) {
w_Packet.m_Check |= EAVI_PACKET_LAST;
}
if(w_II == w_PNum - 1) {
memcpy(w_Packet.m_Data, &ap_Buff[w_II * EAVI_PACKETDATA_SIZE], w_LSize);
w_Packet.m_Len = w_LSize;
CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, EAVI_PACKETHEAD_SIZE + w_LSize);
} else {
memcpy(w_Packet.m_Data, &ap_Buff[w_II * EAVI_PACKETDATA_SIZE], EAVI_PACKETDATA_SIZE);
w_Packet.m_Len = EAVI_PACKETDATA_SIZE;
CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, EAVI_PACKETHEAD_SIZE + EAVI_PACKETDATA_SIZE);
}
Sleep(m_SleepTime);
}
return(1);
}
int CEroomNetAvi::Recv(char *ap_Ip, int &ar_Port, int &ar_Cmd, char *ap_Buff, int &ar_Len)
{
int w_Rtn;
EAVI_PACKET *wp_RPacket;
if(!mp_RecvBuff) {
mp_RecvBuff = new char[m_RecvBuffSize];
}
w_Rtn = CWiseNet::Recv(ap_Ip, ar_Port, ap_Buff, ar_Len, m_WaitFlag);
if(w_Rtn <= 0) {
return(w_Rtn);
}
if(ar_Len < EAVI_PACKETHEAD_SIZE) {
return(0);
}
wp_RPacket = (EAVI_PACKET *)ap_Buff;
if(wp_RPacket->m_Code[0] != m_Code[0] || wp_RPacket->m_Code[1] != m_Code[1]) {
return(0);
}
if(m_PNum == 0 && !(wp_RPacket->m_Check & EAVI_PACKET_FIRST)){
// 贸澜..单捞鸥 沥寸己 眉农
return(0);
}
if(wp_RPacket->m_Check & EAVI_PACKET_FIRST) { // 霉 菩哦牢版快
m_Seq = wp_RPacket->m_Sequence & 0x0ff;
m_RecvLen = 0;
} else if(m_Seq != (int)(wp_RPacket->m_Sequence & 0x0ff)) { // 弊寇 SEQUENCE 眉农 ==> 俊矾 霉菩哦何磐 促矫
// ERROR 沥焊甫 府畔茄促.
// 单捞磐 辨捞绰 歹固肺 1
// ar_Cmd = EAVI_CMD_RECVERROR;
// m_PNum = 0;
// mp_RecvBuff[0] = 0;
// m_RecvLen = 1;
// return(1);
m_PNum = 0;
return(-1);
}
if(m_RecvLen + wp_RPacket->m_Len >= m_RecvBuffSize) {
m_PNum = 0;
return(0);
}
ar_Cmd = wp_RPacket->m_Cmd;
memcpy(&mp_RecvBuff[m_RecvLen], wp_RPacket->m_Data, wp_RPacket->m_Len);
m_RecvLen += wp_RPacket->m_Len;
m_Seq ++;
m_PNum ++;
if(wp_RPacket->m_Check & EAVI_PACKET_LAST) {
m_PNum = 0;
return(m_RecvLen);
}
return(0);
}
extern "C" {
DWORD WINAPI EroomNetAviRecvProc(LPVOID Param);
int EroomAviRecvFunc(char *ap_Ip, int a_Port, char *ap_Buff, int w_Len);
};
int EroomAviRecvFunc(char *ap_Ip, int a_Port, char *ap_Buff, int w_Len)
{
return(1);
}
int CEroomNetAvi::SetRecvFunc(int (*ap_RecvFunc)(void *ap_CallObject, char *ap_Ip, int a_Port, int a_Cmd, char *ap_Buff, int w_Len))
{
DWORD IDThread;
HANDLE hThread;
if(!m_RecvFunc && ap_RecvFunc) {
m_RecvFlag = 1;
m_RecvFunc = EroomAviRecvFunc;
m_AviRecvFunc = ap_RecvFunc;
m_HEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
hThread = ::CreateThread(NULL, 0, EroomNetAviRecvProc, this, 0, &IDThread);
if(!hThread) {
SetEvent(m_HEvent);
CloseHandle(m_HEvent);
m_HEvent = NULL;
m_RecvFlag = 0;
m_RecvFunc = NULL;
return(-1);
}
} else if(m_RecvFunc && !ap_RecvFunc) {
m_RecvFlag = 0;
if(m_HEvent) {
WaitForSingleObject(m_HEvent, WN_KILLWAITTIME);
CloseHandle(m_HEvent);
m_HEvent = NULL;
}
}
return(1);
}
extern "C" DWORD WINAPI EroomNetAviRecvProc(LPVOID Param)
{
int w_Flag = 0;
int w_Port;
char w_Ip[256];
char w_Buff[WN_MAX_RECVLEN+WN_MAX_RECVLEN];
int w_Len;
int w_Cmd;
int w_Rtn;
CEroomNetAvi *wp_EroomNetAvi = (CEroomNetAvi *)Param;
while(wp_EroomNetAvi->m_RecvFlag) {
w_Rtn = wp_EroomNetAvi->Recv(w_Ip, w_Port, w_Cmd, w_Buff, w_Len);
if(w_Rtn < 0) {
// printf("Getting Error\n");
// printf("Open : 1, Send : 2, Close : 3, Wait Flag(Sending):4 QUIT: Q,q!!!!\n");
} else if(w_Rtn > 0) {
wp_EroomNetAvi->m_AviRecvFunc(wp_EroomNetAvi, w_Ip, w_Port, w_Cmd, wp_EroomNetAvi->mp_RecvBuff, wp_EroomNetAvi->m_RecvLen);
// printf("Dada : (%s), Ip : (%s)\n", w_Ip, w_Buff);
// printf("Open : 1, Send : 2, Close : 3, Wait Flag(Sending):4 QUIT: Q,q!!!!\n");
// } else {
// printf("Data Nothing\n");
// printf("Open : 1, Send : 2, Close : 3, Wait Flag(Sending):4 QUIT: Q,q!!!!\n");
}
Sleep(1);
}
SetEvent(wp_EroomNetAvi->m_HEvent);
wp_EroomNetAvi->m_RecvFlag = 0;
wp_EroomNetAvi->m_RecvFunc = NULL;
wp_EroomNetAvi->m_AviRecvFunc = NULL;
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -