⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eroomfiletran.cpp

📁 network library that can be use all network application!
💻 CPP
字号:
#include "EroomFileTran.h"


CEroomFileTran::CEroomFileTran(int a_QueueFlag) : CWiseNet(a_QueueFlag)
{
	m_Code[0] = 'F';
	m_Code[1] = 'T';
	m_Code[2] = '0';

	m_Seq = 0;
	m_PNum = 0;
}


CEroomFileTran::~CEroomFileTran()
{
}

int CEroomFileTran::Send(char *ap_Ip, int a_Port, char *ap_Buff, int a_Len, char *ap_Buff2, int a_Len2)
{
/*
	int			w_II;
	int			w_PNum, w_LSize;
	FT_PACKET	w_Packet;
	ULONG		w_STime, w_ETime;
	MSG			w_Msg;


	if(!ap_Buff2 || !a_Len2) {
		a_Len2 = 0;
	}

	w_PNum = (a_Len + a_Len2) / FT_PACKETDATA_SIZE;
	w_LSize = (a_Len + a_Len2) % FT_PACKETDATA_SIZE;
	if(w_LSize > 0) {
		w_PNum ++;
	} else {
		w_LSize = FT_PACKETDATA_SIZE;
	}


	for(w_II=0;w_II<w_PNum;w_II++) {

		memset(&w_Packet, 0x00, FT_PACKETHEAD_SIZE);	// 庆歹父 檬扁拳 

		w_Packet.m_Code[0] = m_Code[0];
		w_Packet.m_Code[1] = m_Code[1];
		w_Packet.m_Cmd = FT_CMD_DATA;

		w_Packet.m_Sequence = (w_II %  255) & 0x0ff;

		if(w_PNum == 1 && w_II == 0) {
			w_Packet.m_Check = FT_PACKET_ONLY;

			if(ap_Buff2 && a_Len2) {
				memcpy(w_Packet.m_Data, ap_Buff2, a_Len2);
			}
			
			memcpy(&w_Packet.m_Data[a_Len2], &ap_Buff[0], w_LSize - a_Len2);
			w_Packet.m_Len = w_LSize;

			m_SendFlag = 0;
			CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, FT_PACKETHEAD_SIZE + w_LSize);
		}  else if(w_II == 0) {
			w_Packet.m_Check = FT_PACKET_FIRST;

			if(ap_Buff2 && a_Len2) {
				memcpy(w_Packet.m_Data, ap_Buff2, a_Len2);
			}

			memcpy(&w_Packet.m_Data[a_Len2], &ap_Buff[0], FT_PACKETDATA_SIZE - a_Len2);
			w_Packet.m_Len = FT_PACKETDATA_SIZE;

			m_SendFlag = 1;
			CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, FT_PACKETHEAD_SIZE + FT_PACKETDATA_SIZE);

		} else if(w_II == w_PNum - 1) {
			w_Packet.m_Check = FT_PACKET_LAST;

			memcpy(w_Packet.m_Data, &ap_Buff[w_II * FT_PACKETDATA_SIZE - a_Len2], w_LSize);
			w_Packet.m_Len = w_LSize;

			m_SendFlag = 0;
			CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, FT_PACKETHEAD_SIZE + w_LSize);
		} else {
			memcpy(w_Packet.m_Data, &ap_Buff[w_II * FT_PACKETDATA_SIZE - a_Len2], FT_PACKETDATA_SIZE);
			w_Packet.m_Len = FT_PACKETDATA_SIZE;

			m_SendFlag = 1;
			CWiseNet::Send(ap_Ip, a_Port, (char *)&w_Packet, FT_PACKETHEAD_SIZE + FT_PACKETDATA_SIZE);
		}
		if(w_II < w_PNum -1) {
			w_STime = GetTickCount();
			while(m_RecvFlag && m_SendFlag) {
				if(::PeekMessage(&w_Msg, NULL, 0, 0, PM_REMOVE)) {
					if (w_Msg.message == WM_QUIT) {
						break;
					}
					::TranslateMessage(&w_Msg);
					::DispatchMessage(&w_Msg);
				}
				w_ETime = GetTickCount();
				if((w_ETime - w_STime) > 1000) {
					return(-1);
				}
				Sleep(1);
			}
			Sleep(m_SleepTime);
		}
	}
*/
	return(1);
}


int	CEroomFileTran::Recv(char *ap_Ip, int &ar_Port, char *ap_Buff, int &ar_Len)
{
/*
	int				w_Rtn;
	FT_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 < FT_PACKETHEAD_SIZE) {
		return(0);
	}
	wp_RPacket = (FT_PACKET *)ap_Buff;

	if(wp_RPacket->m_Code[0] != m_Code[0] || wp_RPacket->m_Code[1] != m_Code[1]) {
		return(0);
	}
	if(wp_RPacket->m_Cmd == FT_CMD_CONFIRM) {
		m_SendFlag = 0;
		return(0);
	} else if(!(wp_RPacket->m_Check & FT_PACKET_LAST)) {
		SendConfirm(ap_Ip, ar_Port);
	}

	if(m_PNum == 0 && !(wp_RPacket->m_Check & FT_PACKET_FIRST)){
														//  贸澜..单捞鸥 沥寸己 眉农 
		return(0);
	}
	if(wp_RPacket->m_Check & FT_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(0);
	}
	if(m_RecvLen + wp_RPacket->m_Len >= m_RecvBuffSize) {
		m_PNum = 0;
		return(0);
	}

	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 & FT_PACKET_LAST) {
		m_PNum = 0;
		return(m_RecvLen);
	}
*/
	return(0);
}



extern "C" {
	DWORD WINAPI EroomNetFileTranRecvProc(LPVOID Param);
};


int CEroomFileTran::SetRecvFunc(int (*ap_RecvFunc)(char *ap_Ip, int a_Port, char *ap_Buff, int w_Len), int a_WaitTime)
{
	DWORD		IDThread;
	HANDLE		hThread;

	if(!m_RecvFunc && ap_RecvFunc) {
		m_RecvFlag = 1;
		m_RecvFunc = ap_RecvFunc;
		m_WaitFlag = a_WaitTime;
		m_HEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
		hThread = ::CreateThread(NULL, 0, EroomNetFileTranRecvProc, 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 EroomNetFileTranRecvProc(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_Rtn;
	CEroomFileTran	*wp_EroomNetWb = (CEroomFileTran *)Param;

	while(wp_EroomNetWb->m_RecvFlag) {
		w_Rtn = wp_EroomNetWb->Recv(w_Ip, w_Port, 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_EroomNetWb->m_RecvFunc(w_Ip, w_Port, wp_EroomNetWb->mp_RecvBuff, wp_EroomNetWb->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_EroomNetWb->m_HEvent);
	wp_EroomNetWb->m_RecvFlag = 0;
	wp_EroomNetWb->m_RecvFunc = NULL;

	return(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -