www.pudn.com > MirGui.rar > MirMsg.cpp
// MirMsg.cpp: implementation of the MirMsg class. // ////////////////////////////////////////////////////////////////////// #include "MirMsg.h" #include "mircode.h" #include////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CMirMsg::CMirMsg() { m_ConvBuffer = new char[MSGBUFFERSIZE]; m_RecvBuffer = new char[MSGBUFFERSIZE]; m_SendBuffer = new char[MSGBUFFERSIZE]; m_msgflag = '1'; } CMirMsg::~CMirMsg() { delete m_ConvBuffer; delete m_RecvBuffer; delete m_SendBuffer; } int CMirMsg::SendString( SOCKET s, char * string ) { int ierr = 0; int ilen = strlen( string ); ierr = send( s, string, ilen, 0 ); if( ierr == ilen ) { if( string[0] == '*' ) return ierr; m_msgflag ++; if( m_msgflag > '9' ) m_msgflag = '1'; } return ierr; } int CMirMsg::RecvString( SOCKET s, char * string, int maxlen ) { int ierr = 0; //char tmpBuffer[MSGLENGTH]; ierr = recv( s, m_RecvBuffer, MSGBUFFERSIZE, 0 ); if( ierr !=- 1 ) { if( m_RecvBuffer[0] == '*' ) { ierr --; memcpy( (void*)string, &m_RecvBuffer[1], ierr ); } else { memcpy( (void*)string, m_RecvBuffer, ierr ); } string[ierr] = '\0'; } return ierr; } int CMirMsg::RecvMsg( SOCKET s, MMSG * pmsg ) { int ierr; ierr = RecvString( s, m_RecvBuffer, MSGBUFFERSIZE ); if( ierr == -1 ) { return -1; } if( m_RecvBuffer[0] != '#' ) { return 0; } if(m_RecvBuffer[ierr-1] == '!' ) { m_RecvBuffer[ierr-1] = '\0'; } ierr = UnGameCode( &m_RecvBuffer[1], (BYTE*)pmsg ); return ierr; } int CMirMsg::RecvGateMsg( SOCKET s, MMSG * pmsg ) { int ierr; ierr = RecvString( s, m_RecvBuffer, MSGLENGTH ); if( ierr == -1 ) { return -1; } if( m_RecvBuffer[0] != '<' ) return 0; if( m_RecvBuffer[ierr-1] != '>' ) return 0; m_RecvBuffer[ierr-1] = '\0'; ierr = UnGateCode( &m_RecvBuffer[1], m_ConvBuffer ); ierr = strlen( m_ConvBuffer ); if( m_ConvBuffer[0] != '#' ) return 0; if(m_ConvBuffer[ierr-1] == '!' ) { m_ConvBuffer[ierr-1] = '\0'; } ierr = UnGameCode( &m_ConvBuffer[1], (BYTE*)pmsg ); return ierr; } int CMirMsg::SendMsg( SOCKET s, MMSG * pmsg ) { int msize = 0; msize = strlen(pmsg->data ) + MSGHEADERSIZE; CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)m_ConvBuffer ); // if( pmsg->wCmd == 0xbc2 ) // MessageBox( 0, m_ConvBuffer, 0, 0 ); sprintf( m_SendBuffer , "#%c%s!",m_msgflag, m_ConvBuffer ); return SendString( s, m_SendBuffer ); } int CMirMsg::SendGateMsg( SOCKET s, MMSG * pmsg ) { int msize = 0; msize = strlen(pmsg->data ) + MSGHEADERSIZE; CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)m_ConvBuffer ); sprintf( m_SendBuffer , "#%c%s!",m_msgflag, m_ConvBuffer ); // MessageBox( 0, m_SendBuffer, 0, 0 ); CodeGateCode( m_SendBuffer, m_ConvBuffer ); sprintf( m_SendBuffer, "<%s>", m_ConvBuffer ); return SendString( s, m_SendBuffer ); } char CMirMsg::GetMsgFlag() { return m_msgflag; }