📄 mysock.cpp
字号:
pSHKBEGIN=(SHKBEGINHEARER*)pdata;
if( (pSHKBEGIN->shkf1==12)&&(pSHKBEGIN->shkf2==2)&&
(pSHKBEGIN->shkf3==0) ){//出牌信号
//...........................
pMySock->m_pDlg->m_csRecord="";
//.........................
pMySock->m_pDlg->m_cs14="ZZ";
pMySock->m_pDlg->m_cs13="FF";
pMySock->m_pDlg->m_cs12="22222222";
pMySock->m_pDlg->m_cs11="AAAAAAAA";
pMySock->m_pDlg->m_cs10="KKKKKKKK";
pMySock->m_pDlg->m_cs9 ="QQQQQQQQ";
pMySock->m_pDlg->m_cs8 ="JJJJJJJJ";
pMySock->m_pDlg->m_cs7 ="00000000";
pMySock->m_pDlg->m_cs6 ="99999999";
pMySock->m_pDlg->m_cs5 ="88888888";
pMySock->m_pDlg->m_cs4 ="77777777";
pMySock->m_pDlg->m_cs3 ="66666666";
pMySock->m_pDlg->m_cs2 ="55555555";
pMySock->m_pDlg->m_cs1 ="44444444";
pMySock->m_pDlg->m_cs0 ="33333333";
char k=0;
begin=pdata[40];//在2002.1.27分析,为打牌者编号0-4
for(char j=0;j<27;j++){//双扣共计27张牌
//cs+=SHKIndex[*(pdata+52+j)];//51=71+8-27+1
k=SHKIndexCPL[*(pdata+52+j)];//k为m_csK;
if (k==0) pMySock->m_pDlg->m_cs0.Delete(0,1);
else if (k==1) pMySock->m_pDlg->m_cs1.Delete(0,1);
else if (k==2) pMySock->m_pDlg->m_cs2.Delete(0,1);
else if (k==3) pMySock->m_pDlg->m_cs3.Delete(0,1);
else if (k==4) pMySock->m_pDlg->m_cs4.Delete(0,1);
else if (k==5) pMySock->m_pDlg->m_cs5.Delete(0,1);
else if (k==6) pMySock->m_pDlg->m_cs6.Delete(0,1);
else if (k==7) pMySock->m_pDlg->m_cs7.Delete(0,1);
else if (k==8) pMySock->m_pDlg->m_cs8.Delete(0,1);
else if (k==9) pMySock->m_pDlg->m_cs9.Delete(0,1);
else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
}//end for*/
pMySock->m_pDlg->m_diaRecord.m_csLeft="";
pMySock->m_pDlg->m_diaRecord.m_csFace="";
pMySock->m_pDlg->m_diaRecord.m_csRigh="";
pMySock->m_pDlg->m_diaRecord.m_csMeis="";
::SendMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
}//end if( (//出牌信号结束
pSHK=(SHKHEADER*)pdata;
if( (pSHK->shkf1==11)&&(pSHK->shkf2==2)&&
(pSHK->shkf3==0) ){//出牌信息..
char* pd=pdata+sizeof(SHKHEADER);
char k,j=pSHK->count;//牌的张数..
//if( (begin!=pSHK->begin)&&(j>0) ){
if(j>0){
for(;j>0;j--,pd+=4){
cs+=SHKIndex[*pd];
if(begin==pSHK->begin) continue;
k=SHKIndexCPL[*pd];//k为m_csK;
if (k==0) pMySock->m_pDlg->m_cs0.Delete(0,1);
else if (k==1) pMySock->m_pDlg->m_cs1.Delete(0,1);
else if (k==2) pMySock->m_pDlg->m_cs2.Delete(0,1);
else if (k==3) pMySock->m_pDlg->m_cs3.Delete(0,1);
else if (k==4) pMySock->m_pDlg->m_cs4.Delete(0,1);
else if (k==5) pMySock->m_pDlg->m_cs5.Delete(0,1);
else if (k==6) pMySock->m_pDlg->m_cs6.Delete(0,1);
else if (k==7) pMySock->m_pDlg->m_cs7.Delete(0,1);
else if (k==8) pMySock->m_pDlg->m_cs8.Delete(0,1);
else if (k==9) pMySock->m_pDlg->m_cs9.Delete(0,1);
else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
}//end for(;j减去一次出的牌..
cs+=" ";
if( (begin+1)%4==pSHK->begin){
pMySock->m_pDlg->m_diaRecord.m_csLeft+=cs;
}
else if( (begin+2)%4==pSHK->begin){
pMySock->m_pDlg->m_diaRecord.m_csFace+=cs;
}
//pMySock->m_pDlg->m_dFace.PutMs((LPCSTR)cs);
else if( (begin+3)%4==pSHK->begin){
pMySock->m_pDlg->m_diaRecord.m_csRigh+=cs;
}
else{
pMySock->m_pDlg->m_diaRecord.m_csMeis+=cs;
}
::SendMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
cs="";
}//end if begin
}//end if一次出牌结束。
::SendMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);
if(w==i) break;
//调试信息.....
//char t1[250];
//sprintf(t1,"隔断TCP包i=%u,w=%u",(unsigned int)i,(unsigned int)w);
//AfxMessageBox(t1);
//........
i-=w;//两次有效信息在一起...要分析下一次数据....
pdata=pdata+w;
}//end while(1);//全部数据分析完成.
/*pShK=(SHKHEADER*)pdata;
static unsigned char ch;
ch=(unsigned char)pShK->count;
static unsigned char oldcount=ch;
static unsigned char oldbegin=(unsigned char)pShK->begin;
if(pShK->shkf1!=11||pShK->shkf2!=2||pShK->shkf3!=0)
return 0;
pdata=pdata+sizeof(SHKHEADER);
if( (ch==0)&&(oldbegin!=pShK->begin) )
for(ch=oldcount;ch>0;ch--)
cs+=".";
else{
oldcount=ch;
oldbegin=pShK->begin;
for(;ch>0;ch--,pdata+=4)
cs+=ShKIndex[*pdata];
}
*/
//pMySock->m_pDlg->m_cs2 ="55555555";
//pMySock->m_pDlg->m_cs1 ="44444444";
//pMySock->m_pDlg->m_cs0 ="33333333";
//::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);
return 0;
}
int ProceDZHTcp(char* pdata,CMySock* pMySock,unsigned int i)
{
//只能用于单幅牌..
DZHHEADER* pDZH=NULL;
OURGAMEHEADER* pOURGAME=NULL;
DZHBEGINHEARER* pDZHBEGIN=NULL;
DZHHAVEHEADER* pDZHHAVE=NULL;
CString cs="";
unsigned int w;
static char begin=0;
while(1){
pOURGAME=(OURGAMEHEADER*)pdata;
if( (pOURGAME->flag1==0)&&(pOURGAME->flag2==0)&&
(pOURGAME->flag3==0) ) break;//更换游戏室的数据,退出
else if(pOURGAME->flag4==128) w=(4+4+4+pOURGAME->allbyte);
else if(pOURGAME->flag4==0) w=(4+4+ pOURGAME->allbyte);
else{
//char szErr[50];
//memset(szErr,0,sizeof(szErr));
//sprintf(szErr,"%u,%u,%u,%u,%u",pdata[0],pdata[1],
// pdata[2],pdata[3],pdata[4]);
//AfxMessageBox(szErr);
break;//一个未知的数据,退出。
}
pDZHBEGIN=(DZHBEGINHEARER*)pdata;
if( (pDZHBEGIN->dzhf1==12)&&(pDZHBEGIN->dzhf2==2)&&
(pDZHBEGIN->dzhf3==0) ){//出牌信号
//...........................
pMySock->m_pDlg->m_csRecord="";
//.........................
pMySock->m_pDlg->m_cs14="Z";
pMySock->m_pDlg->m_cs13="F";
pMySock->m_pDlg->m_cs12="2222";
pMySock->m_pDlg->m_cs11="AAAA";
pMySock->m_pDlg->m_cs10="KKKK";
pMySock->m_pDlg->m_cs9 ="QQQQ";
pMySock->m_pDlg->m_cs8 ="JJJJ";
pMySock->m_pDlg->m_cs7 ="0000";
pMySock->m_pDlg->m_cs6 ="9999";
pMySock->m_pDlg->m_cs5 ="8888";
pMySock->m_pDlg->m_cs4 ="7777";
pMySock->m_pDlg->m_cs3 ="6666";
pMySock->m_pDlg->m_cs2 ="5555";
pMySock->m_pDlg->m_cs1 ="4444";
pMySock->m_pDlg->m_cs0 ="3333";
char k=0;
begin=pdata[40];//打牌者编号0-3
for(char j=0;j<17;j++){
k=SHKIndexCPL[*(pdata+56+j)];//k为m_csK;
if (k==0) pMySock->m_pDlg->m_cs0.Delete(0,1);
else if (k==1) pMySock->m_pDlg->m_cs1.Delete(0,1);
else if (k==2) pMySock->m_pDlg->m_cs2.Delete(0,1);
else if (k==3) pMySock->m_pDlg->m_cs3.Delete(0,1);
else if (k==4) pMySock->m_pDlg->m_cs4.Delete(0,1);
else if (k==5) pMySock->m_pDlg->m_cs5.Delete(0,1);
else if (k==6) pMySock->m_pDlg->m_cs6.Delete(0,1);
else if (k==7) pMySock->m_pDlg->m_cs7.Delete(0,1);
else if (k==8) pMySock->m_pDlg->m_cs8.Delete(0,1);
else if (k==9) pMySock->m_pDlg->m_cs9.Delete(0,1);
else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
}//end for*/
pMySock->m_pDlg->m_diaRecord.m_csLeft="";
pMySock->m_pDlg->m_diaRecord.m_csFace="";
pMySock->m_pDlg->m_diaRecord.m_csRigh="";
pMySock->m_pDlg->m_diaRecord.m_csMeis="";
::PostMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
}//end if( (//出牌信号结束
pDZH=(DZHHEADER*)pdata;
if( (pDZH->dzhf1==16)&&(pDZH->dzhf2==32)&&
(pDZH->dzhf3==1) ){//出牌信息..
char* pd=pdata+sizeof(DZHHEADER);
pd+=4;//于双扣不一样的地方.不知道为什么?..
char k,j=pDZH->count;//牌的张数..
//if(begin!=pDZH->begin){
if(j>0){
for(;j>0;j--,pd+=4){
cs+=SHKIndex[*pd];
if(begin==pDZH->begin) continue;
k=SHKIndexCPL[*pd];//k为m_csK;
if (k==0) pMySock->m_pDlg->m_cs0.Delete(0,1);
else if (k==1) pMySock->m_pDlg->m_cs1.Delete(0,1);
else if (k==2) pMySock->m_pDlg->m_cs2.Delete(0,1);
else if (k==3) pMySock->m_pDlg->m_cs3.Delete(0,1);
else if (k==4) pMySock->m_pDlg->m_cs4.Delete(0,1);
else if (k==5) pMySock->m_pDlg->m_cs5.Delete(0,1);
else if (k==6) pMySock->m_pDlg->m_cs6.Delete(0,1);
else if (k==7) pMySock->m_pDlg->m_cs7.Delete(0,1);
else if (k==8) pMySock->m_pDlg->m_cs8.Delete(0,1);
else if (k==9) pMySock->m_pDlg->m_cs9.Delete(0,1);
else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
}//end for(;j减去一个出的牌..
cs+=" ";
if( (begin+1)%3==pDZH->begin){
pMySock->m_pDlg->m_diaRecord.m_csLeft+=cs;
}
else if( (begin+2)%3==pDZH->begin){
pMySock->m_pDlg->m_diaRecord.m_csRigh+=cs;
}
else{
pMySock->m_pDlg->m_diaRecord.m_csMeis+=cs;
}
::PostMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
cs="";
}//end if begin
}//end if一次出牌结束。
pDZHHAVE=(DZHHAVEHEADER*)pdata;//地主给谁的信号
if( (pDZHHAVE->dzhf1==9)&&(pDZHHAVE->dzhf2==32)&&
(pDZHHAVE->dzhf3==1) ){
if(begin==pDZHHAVE->dzh){//地主就是自己,减牌
for(char j=0,k;j<=2;j++){
if(j==0) k=SHKIndexCPL[pDZHHAVE->pai1];//k为m_csK;
else if(j==2) k=SHKIndexCPL[pDZHHAVE->pai2];
else k=SHKIndexCPL[pDZHHAVE->pai3];
if (k==0) pMySock->m_pDlg->m_cs0.Delete(0,1);
else if (k==1) pMySock->m_pDlg->m_cs1.Delete(0,1);
else if (k==2) pMySock->m_pDlg->m_cs2.Delete(0,1);
else if (k==3) pMySock->m_pDlg->m_cs3.Delete(0,1);
else if (k==4) pMySock->m_pDlg->m_cs4.Delete(0,1);
else if (k==5) pMySock->m_pDlg->m_cs5.Delete(0,1);
else if (k==6) pMySock->m_pDlg->m_cs6.Delete(0,1);
else if (k==7) pMySock->m_pDlg->m_cs7.Delete(0,1);
else if (k==8) pMySock->m_pDlg->m_cs8.Delete(0,1);
else if (k==9) pMySock->m_pDlg->m_cs9.Delete(0,1);
else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
}//end for(;j
}//if(begin==pDZHHAVE->dzh){
}//if( (pDZHHAVE->dzhf1).......地主给谁结束、
if(w==i) break;
i-=w;//两次有效信息在一起...要分析下一次数据....
pdata=pdata+w;
}//end while(1);//全部数据分析完成.
::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -