MirMsg.cpp
上传用户:marco7834
上传日期:2010-02-24
资源大小:82k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // MirMsg.cpp: implementation of the MirMsg class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "MirMsg.h"
  5. #include "mircode.h"
  6. #include <stdio.h>
  7. //////////////////////////////////////////////////////////////////////
  8. // Construction/Destruction
  9. //////////////////////////////////////////////////////////////////////
  10. CMirMsg::CMirMsg()
  11. {
  12. m_ConvBuffer = new char[MSGBUFFERSIZE];
  13. m_RecvBuffer = new char[MSGBUFFERSIZE];
  14. m_SendBuffer = new char[MSGBUFFERSIZE];
  15. m_msgflag = '1';
  16. }
  17. CMirMsg::~CMirMsg()
  18. {
  19. delete m_ConvBuffer;
  20. delete m_RecvBuffer;
  21. delete m_SendBuffer;
  22. }
  23. int CMirMsg::SendString( SOCKET s, char * string )
  24. {
  25. int ierr = 0;
  26. int ilen = strlen( string );
  27. ierr = send( s, string, ilen, 0 );
  28. if( ierr == ilen )
  29. {
  30. if( string[0] == '*' )
  31. return ierr;
  32. m_msgflag ++;
  33. if( m_msgflag > '9' )
  34. m_msgflag = '1';
  35. }
  36. return ierr;
  37. }
  38. int CMirMsg::RecvString( SOCKET s, char * string, int maxlen )
  39. {
  40. int ierr = 0;
  41. //char tmpBuffer[MSGLENGTH];
  42. ierr = recv( s, m_RecvBuffer, MSGBUFFERSIZE, 0 );
  43. if( ierr !=- 1 )
  44. {
  45. if( m_RecvBuffer[0] == '*' )
  46. {
  47. ierr --;
  48. memcpy( (void*)string, &m_RecvBuffer[1], ierr );
  49. }
  50. else
  51. {
  52. memcpy( (void*)string, m_RecvBuffer, ierr );
  53. }
  54. string[ierr] = '';
  55. }
  56. return ierr;
  57. }
  58. int CMirMsg::RecvMsg( SOCKET s, MMSG * pmsg )
  59. {
  60. int ierr;
  61. ierr = RecvString( s, m_RecvBuffer, MSGBUFFERSIZE );
  62. if( ierr == -1 )
  63. {
  64. return -1;
  65. }
  66. if( m_RecvBuffer[0] != '#' )
  67. {
  68. return 0;
  69. }
  70. if(m_RecvBuffer[ierr-1] == '!' )
  71. {
  72. m_RecvBuffer[ierr-1] = '';
  73. }
  74. ierr = UnGameCode( &m_RecvBuffer[1], (BYTE*)pmsg );
  75. return ierr;
  76. }
  77. int CMirMsg::RecvGateMsg( SOCKET s, MMSG * pmsg )
  78. {
  79. int ierr;
  80. ierr = RecvString( s, m_RecvBuffer, MSGLENGTH );
  81. if( ierr == -1 )
  82. {
  83. return -1;
  84. }
  85. if( m_RecvBuffer[0] != '<' )
  86. return 0;
  87. if( m_RecvBuffer[ierr-1] != '>' )
  88. return 0;
  89. m_RecvBuffer[ierr-1] = '';
  90. ierr = UnGateCode( &m_RecvBuffer[1], m_ConvBuffer );
  91. ierr = strlen( m_ConvBuffer );
  92. if( m_ConvBuffer[0] != '#' )
  93. return 0;
  94. if(m_ConvBuffer[ierr-1] == '!' )
  95. {
  96. m_ConvBuffer[ierr-1] = '';
  97. }
  98. ierr = UnGameCode( &m_ConvBuffer[1], (BYTE*)pmsg );
  99. return ierr;
  100. }
  101. int CMirMsg::SendMsg( SOCKET s, MMSG * pmsg )
  102. {
  103. int msize = 0;
  104. msize = strlen(pmsg->data ) + MSGHEADERSIZE;
  105. CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)m_ConvBuffer );
  106. // if( pmsg->wCmd == 0xbc2 )
  107. // MessageBox( 0, m_ConvBuffer, 0, 0 );
  108. sprintf( m_SendBuffer , "#%c%s!",m_msgflag, m_ConvBuffer );
  109. return SendString( s, m_SendBuffer );
  110. }
  111. int CMirMsg::SendGateMsg( SOCKET s, MMSG * pmsg )
  112. {
  113. int msize = 0;
  114. msize = strlen(pmsg->data ) + MSGHEADERSIZE;
  115. CodeGameCode( (BYTE*)pmsg, msize, (BYTE*)m_ConvBuffer );
  116. sprintf( m_SendBuffer , "#%c%s!",m_msgflag, m_ConvBuffer );
  117. // MessageBox( 0, m_SendBuffer, 0, 0 );
  118. CodeGateCode( m_SendBuffer, m_ConvBuffer );
  119. sprintf( m_SendBuffer, "<%s>", m_ConvBuffer );
  120. return SendString( s, m_SendBuffer );
  121. }
  122. char CMirMsg::GetMsgFlag()
  123. {
  124. return m_msgflag;
  125. }