ReadGameMsg.cpp
上传用户:garry_shen
上传日期:2015-04-15
资源大小:45647k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "socket.h"
  3. #include "..XMudClient.h"
  4. #include "..InterNetMsg.h"
  5. extern SOCKET hLCltForRSvrSock;
  6. extern char g_szReceive[];
  7. extern BOOL ExplainSvrMsg(char *szBuf);
  8. extern void SrvSendMsg(char *szBuf);
  9. extern int nRecTimes;
  10. extern int g_nReceiveMsgState;
  11. int CheckCharOnString(char *lpstr,char c);
  12. BOOL ReadServerMsg(void)
  13. {
  14.          long  len,i,times,hr;
  15.   static long  ptr=0,entry=0;
  16.          char *szTemple=NULL;
  17.   static char *szBuffer=NULL;
  18.   entry++;
  19.   if(entry>1) {
  20.     return TRUE;
  21.   }
  22.   for(times=0;times<8;times++) {
  23.     if(ptr)   {
  24.       szBuffer=(char *)realloc(szBuffer,ptr+INPUT_SIZE);
  25.     }  else  {
  26.       szBuffer=(char *)malloc(INPUT_SIZE);
  27.     }
  28.     len=recv(hLCltForRSvrSock,szBuffer+ptr,INPUT_SIZE,0);
  29.     if(len==SOCKET_ERROR) { 
  30.       if((hr=WSAGetLastError())==WSAEWOULDBLOCK)   {
  31.         break;
  32.       } else  {
  33.         entry--;
  34.         return FALSE;
  35.       }
  36.     }
  37.     while(len>0) {
  38.       for(i=ptr;i<ptr+len;i++) if(*(szBuffer+i)=='27') break;
  39.       if(i>=ptr+len) {
  40.         ptr+=len;
  41.         len=0;
  42. if ((g_nReceiveMsgState == SVRMSG_CREATENEW) ||
  43. (g_nReceiveMsgState == SVRMSG_LOADOLD) ||
  44. (g_nReceiveMsgState == SVRMSG_CHANGEMAP)) nRecTimes++;
  45.       }else {
  46.         if(ptr+len>i+1){
  47.           szTemple=(char *)malloc(ptr+len-i-1);
  48.           memcpy(szTemple,szBuffer+i+1,ptr+len-i-1);
  49.         }else  {
  50.           szTemple=NULL;
  51.         }
  52.         memset(g_szReceive,0,INPUT_SIZE);
  53.         memcpy(g_szReceive,szBuffer,i>INPUT_SIZE?INPUT_SIZE:i);
  54.         szBuffer[i]=0;
  55.         if(i>0 && !ExplainSvrMsg(szBuffer)) SrvSendMsg(szBuffer);
  56.         free(szBuffer);
  57.         szBuffer=szTemple;
  58.         len-=i+1-ptr;
  59.         ptr=0;
  60.       }
  61.     }
  62.   }
  63.   entry--;
  64.   return TRUE;
  65. }