stoneage8.5/石器时代8.5客户端最新源代码/石器源码/system/phonemsg.cpp

615 lines
15 KiB
C++
Raw Normal View History

2020-06-22 17:49:02 +08:00
//==========================================================================
// <20><><EFBFBD><EFBFBD> : PhoneMsg.cpp
// <20><><EFBFBD><EFBFBD> : ʯ<><CAAF>ʱ<EFBFBD><CAB1>[<5B><>Ѷ]<5D><>ť<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ʵ<EFBFBD><CAB5>(V3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>)
// ׫д<D7AB><D0B4> : <20><> <20><> <20><> (Leiboy)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2002<30><32>01<30><31>26<32><36>
// <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2002<30><32>02<30><32>02<30><32>==><3E><><EFBFBD><EFBFBD>Multithread(<28><>ʽ<EFBFBD><CABD>)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2002<30><32>02<30><32>20<32><30>==><3E><>MFC<46><43>д<EFBFBD><D0B4>Winsock<63><6B>ʽ!(<28><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD>!)
// <20><><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2002<30><32>02<30><32>26<32><36>==><3E><><EFBFBD><EFBFBD>DNS(<28><>ʽ<EFBFBD><CABD>)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2002<30><32>03<30><33>04<30><34>
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> : <20><>Ϸ<EFBFBD>гɹ<D0B3><C9B9>ش<EFBFBD><D8B4><EFBFBD>һͨ<D2BB><CDA8>Ѷÿ<D1B6>ν<EFBFBD><CEBD><EFBFBD>WGS<47><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
//==========================================================================
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
#include "../systeminc/version.h"
#ifdef __PHONEMESSAGE
#include <winsock2.h>
#include "time.h"
#include "../systeminc/system.h"
#include "../systeminc/loadrealbin.h"
#include "../systeminc/anim_tbl.h"
#include "../systeminc/login.h"
#include "../systeminc/menu.h"
#include "../systeminc/map.h"
#include "../systeminc/ime_sa.h"
#include "../systeminc/t_music.h"
#include "../systeminc/field.h"
#include "../systeminc/pc.h"
#include "../wgs/descrypt.h"
#include "../other/caryIme.h"
#define MSG_SURE_D 26288 //ȷ<><C8B7>(<28><><EFBFBD><EFBFBD>)(<28><>ɫ<EFBFBD><C9AB>)
#define MSG_SURE_U 26289 //ȷ<><C8B7>(<28><><EFBFBD><EFBFBD>)(<28><>ɫ<EFBFBD><C9AB>)
#define MSG_CANCEL_U 26284 //ȡ<><C8A1><><CEB4><EFBFBD><EFBFBD>)
#define MSG_CANCEL_D 26285 //ȡ<><C8A1>(<28><><EFBFBD><EFBFBD>)
#define MSG_CLEAR_U 26298 //<2F><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
#define MSG_CLEAR_D 26299 //<2F><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
//Messsage <20><>Log ר<><D7A8><EFBFBD><EFBFBD> Begin
#ifdef _STONDEBUG_
char logstr[512];
#define logfilename "message.log"
#endif
//Messsage <20><>Log ר<><D7A8><EFBFBD><EFBFBD> End
BOOL QueryMyIP(char HostName[]);
//ʯ<><CAAF><EFBFBD><EFBFBD>ѶServer IP : 210.64.97.17
char *MsgIP;
#define SMSDomainName "sms.hwaei.com.tw"
//Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ASP filename
#define ASPname "//sms//stoneage.asp" //2002 Feb. 20<32><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
int myvalue;
char seqno[14]; //Wayia_seqno
//************************************************
//<2F><>ʽһ : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ASP<53>乵ͨ<E4B9B5><CDA8>ר<EFBFBD>ú<EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : 0 --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> & <20><>Ѷ<EFBFBD><D1B6><EFBFBD>ͳɹ<CDB3>
// 1 --- <20><>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
// 2 --- <20>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 3 --- <20>ֻ<EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)
// 4 --- <20><>·<EFBFBD>˴<EFBFBD><CBB4><EFBFBD>
// 5 --- WGS<47><53><EFBFBD><EFBFBD>(<28><>ͨ<EFBFBD><CDA8>)<29>Ѳ<EFBFBD><D1B2><EFBFBD>!!(С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// 6 --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ(<28><>DNSʧ<53><CAA7>)
// 7 --- ASP<53>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
//************************************************
int SendPhoneMsg(char pid[16], char ppw[16], char pps[], char pms[])
{
if(!QueryMyIP(SMSDomainName)) return 6;
if((pps[0] =='\0') || (lstrlen(pps) != 10)) return 2;
if((pps[0] != '0') || (pps[1] != '9')) return 2;
int dv,i=0;
do
{
dv = isdigit(pps[i+2]);
i++;
}while( dv && (i<8));
if(!dv) return 2;
//<2F><>Jason<6F><6E><EFBFBD>ۺ<EFBFBD>,<2C><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ66bytes!! Feb. 5,2002
//<2F><><EFBFBD><EFBFBD>16bytes<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! Feb.22,2002
int x=0,mc=0;
do
{
if(IsDBCSLeadByte(pms[x]))
x+=2;
else
x++;
mc++;
}while(x < lstrlen(pms));
if((mc<1) || (mc>50)) return 3;
char extpms[120];
if(lstrlen(pc.name)>16)
return 3;
else
#ifdef _FIX_URLENCODE // WON ADD <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>޷<EFBFBD><DEB7>ӿո<D3BF><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
char OutTmp[768];
char *pInTmp,*pOutTmp;
char Hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
// do encoding
pInTmp=pms;
pOutTmp=OutTmp;
// ZeroMemory(OutTmp,sizeof(OutTmp));
while (*pInTmp)
{
// if(isalnum(*pInTmp)&&(!IsDBCSLeadByte(*pInTmp)))
if ( (*pInTmp> '0') && (*pInTmp < '9')
|| (*pInTmp> 'a') && (*pInTmp < 'z')
|| (*pInTmp> 'A') && (*pInTmp < 'Z')
)
*pOutTmp++ = *pInTmp;
else
{
// if(isspace(*pInTmp))
if(*pInTmp==0x20&&(!IsDBCSLeadByte(*pInTmp)))
*pOutTmp++ = '+';
else
{
*pOutTmp++ = '%';
*pOutTmp++ = Hex[(*pInTmp>>4)&0x0f];
*pOutTmp++ = Hex[(*pInTmp)&0x0f];
}
}
pInTmp++;
}
*pOutTmp = '\0';
sprintf_s(extpms,"%s:%s",pc.name,OutTmp);
}
#else
sprintf_s(extpms,"%s:%s",pc.name,pms);
#endif
SOCKET hSock;
SOCKADDR_IN stName;
fd_set rfds,wfds;
timeval tmTimeOut;
DWORD timeout;
char *result;
int len, cnt, ret;
tmTimeOut.tv_usec=0;
tmTimeOut.tv_sec=0;
if( INVALID_SOCKET != ( hSock = socket( AF_INET, SOCK_STREAM, 0) ) )
{
DWORD flg = 1;
if( SOCKET_ERROR != ioctlsocket( hSock, FIONBIO, &flg))
{
ZeroMemory( &stName, sizeof(struct sockaddr));
stName.sin_addr.s_addr = inet_addr(MsgIP);
stName.sin_family = PF_INET;
stName.sin_port = htons(80);
ret = connect( hSock, (LPSOCKADDR)&stName, sizeof(struct sockaddr) );
if( SOCKET_ERROR != ret || WSAEWOULDBLOCK == WSAGetLastError() )
{
timeout = TimeGetTime();
while(1)
{
FD_ZERO( &wfds);
FD_SET( hSock, &wfds);
if( select( NULL, (fd_set*)NULL, &wfds, (fd_set*)NULL, &tmTimeOut)>0 && FD_ISSET( hSock, &wfds))
break;
DWORD curtime = TimeGetTime();
if( (timeout+5000) < curtime )
{
closesocket(hSock);
return 6;
}
Sleep(1);
}
cnt = 0;
char buf[1024];
sprintf_s(buf,"GET //sms//stoneage.asp?ID=%s&PWD=%s&TEL=%s&MSG=%s",pid,ppw,pps,extpms);
strcat_s(buf," HTTP/1.1\r\nAccept: text/*\r\nUser-Agent: StoneAge\r\n");
sprintf_s(buf,"%sHost: %s\r\n\r\n",buf,MsgIP);
len = lstrlen(buf);
timeout = TimeGetTime();
while(len)
{
DWORD stime = TimeGetTime();
if( (timeout+3000) < stime )
{
closesocket(hSock);
return 6;
}
FD_ZERO( &wfds);
FD_SET( hSock, &wfds);
select( NULL, (fd_set*)NULL, &wfds, (fd_set*)NULL, &tmTimeOut);
if( !FD_ISSET( hSock, &wfds) )
{
Sleep(1);
continue;
}
ret = send( hSock, &buf[cnt], len, 0);
if( SOCKET_ERROR == ret)
{
closesocket(hSock);
return 4;
}
cnt += ret;
len -= ret;
if(len<1) break;
}
Sleep(500);
len = 1024;
cnt = 0;
timeout = TimeGetTime();
while(1)
{
DWORD rtime = TimeGetTime();
if( (timeout+3000) < rtime )
{
closesocket(hSock);
return 6;
}
FD_ZERO( &rfds);
FD_SET( hSock, &rfds);
select( NULL, &rfds, (fd_set*)NULL, (fd_set*)NULL, &tmTimeOut);
if( !FD_ISSET( hSock, &rfds) )
{
Sleep(1);
continue;
}
ret = recv( hSock, &buf[cnt], len, 0);
if( SOCKET_ERROR == ret)
{
closesocket(hSock);
return 4;
}
if( 0 == ret)
break;
buf[cnt+ret] = 0;
result = strstr( buf, "\r\n\r\n") + 4;
if(result) break;
cnt += ret;
len -= ret;
}
}
}
closesocket(hSock);
if(result[0]=='\0') return 4;
if(result[0]=='1')
{
#ifdef _STONDEBUG_
lstrcpy(logstr,"ʧ<EFBFBD><EFBFBD> ");
lstrcat(logstr,pps);
sprintf_s(logstr,"%s %s",logstr,extpms);
#endif
return 1;
}
else
{
result++;
if(lstrlen(result) < 14)
return 7;
int j=0;
i=0;
do
{
seqno[i] = result[i];
if(result[i] == '0') j++;
i++;
}while(i<14);
seqno[14] = 0;
if(j == 14) return 5;
#ifdef _STONDEBUG_
lstrcpy(logstr,"<EFBFBD>ɹ<EFBFBD>-");
lstrcat(logstr,seqno);
lstrcat(logstr," ");
lstrcat(logstr,pps);
sprintf_s(logstr,"%s %s",logstr,extpms);
#endif
}
return 0;
}
else
return 4;
}
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : <20><><EFBFBD><EFBFBD>Log<6F><67>(<28><>Local<61><6C>Ŀ¼<C4BF><C2BC>)<29><>ר<EFBFBD>ú<EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : None
//<2F><> ע : ֻ<><D6BB>Debug mode<64><65><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>д<EFBFBD><D0B4>log<6F><67>!!
//************************************************
#ifdef _STONDEBUG_
void WriteLog( char cData[], char cFile[])
{
char totals[1024];
struct tm nowTime;
time_t longTime;
time( &longTime );
localtime_s(&nowTime, &longTime );
sprintf_s(totals,"%02d/%02d/%02d %02d:%02d:%02d ",(nowTime.tm_year % 100), nowTime.tm_mon+1, nowTime.tm_mday,
nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);
lstrcat(totals,cData);
lstrcat(totals,"\r\n");
FILE *fp;
fp = fopen(logfilename, "a" );
if(fp)
{
fprintf(fp,totals);
fclose(fp);
}
}
#endif
static int mx = 20, my = 10;
STR_BUFFER pno,ptext;
static STR_BUFFER *MsgFocus[] ={ &pno, &ptext };
static int MsgFocusSw;
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : None
//************************************************
void InitMsgInput()
{
pno.buffer[0]='\0';
//ptext.buffer[0]='\0';
pno.x = mx+125;
pno.y = my+47;
pno.len = 10;
pno.color = FONT_PAL_RED;
pno.fontPrio = FONT_PRIO_FRONT;
pno.cnt = 0;
pno.cursor = 0;
ptext.x = mx+17;
ptext.y = my+87;
ptext.len = 100;
ptext.color = FONT_PAL_AQUA;
ptext.fontPrio = FONT_PRIO_FRONT;
ptext.lineLen=34;
ptext.lineDist=20;
int x = lstrlen(ptext.buffer);
if(x)
ptext.cursor = x;
else
{
ptext.cnt=0;
ptext.cursor=0;
}
}
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : None
//************************************************
int InputMsgData()
{
int id,x1,x2,y1,y2;
StockFontBuffer2(&pno);
StockFontBuffer2(&ptext);
id = -1;
x1 = mx + 115;
y1 = my + 45;
x2 = x1 + 108;
y2 = y1 + 19;
if( MakeHitBox( x1, y1, x2, y2, DISP_PRIO_BOX ) )
{
id = 0;
MsgFocusSw = 0;
}
x1 = mx + 16;
y1 = my + 80;
x2 = x1 + 240;
y2 = y1 + 70;
if( MakeHitBox( x1, y1, x2, y2, DISP_PRIO_BOX ) )
{
id = 1;
MsgFocusSw = 1;
}
x1 = mx + 39;
y1 = my + 190;
x2 = x1 + 67;
y2 = y1 + 24;
if( MakeHitBox( x1, y1, x2, y2, DISP_PRIO_BOX ) )
{
id = 2;
}
x1 = mx + 155;
y1 = my + 190;
x2 = x1 + 67;
y2 = y1 + 24;
if( MakeHitBox( x1, y1, x2, y2, DISP_PRIO_BOX ) )
{
id = 3;
}
x1 = mx + 167;
y1 = my + 160;
x2 = x1 + 84;
y2 = y1 + 19;
if( MakeHitBox( x1, y1, x2, y2, DISP_PRIO_BOX ) )
{
id = 4;
}
return id;
}
HANDLE MHandle;
extern short msgBtn;
extern char szUser[],szPassword[];
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : <20><><EFBFBD><EFBFBD>Multithread<61><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : OL
//************************************************
DWORD WINAPI MsgThread(LPVOID param)
{
msgBtn=1;
myvalue = -1;
char id[32], password[32];
CopyMemory(id,szUser,32);
ecb_crypt("f;encor1c",id,32,DES_DECRYPT);
CopyMemory(password,szPassword,32);
ecb_crypt("f;encor1c",password,32,DES_DECRYPT);
//GetKeyInputFocus(NULL);
#ifdef _STONDEBUG_
logstr[0] = 0;
#endif
myvalue = SendPhoneMsg(id,password,pno.buffer,ptext.buffer);
//GetKeyInputFocus(&MyChatBuffer);
switch(myvalue)
{
case 1:
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_WHITE);
break;
case 2:
StockChatBufferLine("<EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ!",FONT_PAL_RED);
break;
case 3:
StockChatBufferLine("<EFBFBD>ֻ<EFBFBD>ѶϢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ!",FONT_PAL_RED);
break;
case 4:
StockChatBufferLine("<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ!",FONT_PAL_RED);
break;
case 5:
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>WGS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ͨ<EFBFBD><CDA8>)<29>Ѳ<EFBFBD><D1B2><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ!",FONT_PAL_RED);
break;
case 6:
StockChatBufferLine("<EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...",FONT_PAL_WHITE);
break;
case 7:
StockChatBufferLine("<EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>ػ<EFBFBD>Ӧ!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD>޷<EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>?!",FONT_PAL_WHITE);
break;
case -1:
StockChatBufferLine("<EFBFBD><EFBFBD>ʽ<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!",FONT_PAL_RED);
break;
default:
StockChatBufferLine("<EFBFBD><EFBFBD>Ѷ<EFBFBD>Ѿ<EFBFBD><EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD>!",FONT_PAL_YELLOW);
}
#ifdef _STONDEBUG_
if(logstr[0] != 0) WriteLog(logstr,logfilename);
#endif
msgBtn=0;
CloseHandle(MHandle);
ExitThread(0);
return 0L;
}
int MsgID;
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : <20>ֻ<EFBFBD><D6BB><EFBFBD>Ѷ<EFBFBD><D1B6><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>Ҫ<EFBFBD><D2AA>ʽ
//<2F>ش<EFBFBD>ֵ : 0 --- <20>Ӵ<EFBFBD>OPEN
// 1 --- <20>Ӵ<EFBFBD>CLOSE
// 2 --- <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//************************************************
int MsgProc()
{
int id , i , ret;
static int btnId[3];
static int btnState[2];
static DWORD dwPressTime;
static ACTION *pActMenuWin = NULL;
char MsgHint[][30] = {"<EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>","<EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>50<35><30><><D3A2>)<29><>","<EFBFBD>ͳ<EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD>","<EFBFBD>رռ<EFBFBD>Ѷ<EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>","<EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>"};
if(MsgID == 0)
{
for( i = 0; i < sizeof(btnId)/sizeof(int); i++)
btnId[i] = -2;
for( i = 0; i < 3; i++)
btnState[i] = -1;
pActMenuWin = MakeWindowDisp(mx,my,275,225,CG_MSG_WND,-1);
InitMsgInput();
MsgFocusSw = 0;
dwPressTime = 0;
MsgID++;
}
if( pActMenuWin != NULL)
{
id = selGraId( btnId, sizeof(btnId)/sizeof(int));
if(dwPressTime)
{
if( TimeGetTime()>(dwPressTime+100))
{
dwPressTime = 0;
if(btnState[2] == 1)
{
if(ptext.buffer[0]!='\0')
{
ptext.buffer[0]='\0';
ptext.cnt=0;
ptext.cursor=0;
}
if(id==-1) btnState[2] = -1;
}
else if(btnState[0] == 1)
{
if((lstrlen(pno.buffer) > 0) && (lstrlen(ptext.buffer) > 0))
{
pno.buffer[pno.cnt]='\0';
ptext.buffer[ptext.cnt]='\0';
id=50;
}
else
{
if(id==-1)
btnState[0] = -1;
}
}
}
}
else
{
if( -1 < id && id < 3)
{
btnState[id] = 1;
id = -1;
dwPressTime = TimeGetTime();
play_se( 217, 320, 240); //<2F><>ť<EFBFBD><C5A5>
}
}
if( pActMenuWin->hp > 0)
{
StockDispBuffer( ((WINDOW_DISP *)pActMenuWin->pYobi)->mx, ((WINDOW_DISP *)pActMenuWin->pYobi)->my, DISP_PRIO_MENU, CG_MSG_WND, 1);
if(btnState[2] != 1)
btnId[2] = StockDispBuffer( (mx+209), (my+170), DISP_PRIO_IME3, MSG_CLEAR_U , 1);
else
StockDispBuffer( (mx+209), (my+170), DISP_PRIO_IME3, MSG_CLEAR_D , 1);
if(btnState[0] != 1)
btnId[0] = StockDispBuffer( (mx+73), (my+202), DISP_PRIO_IME3, MSG_SURE_U , 1);
else
StockDispBuffer( (mx+73), (my+202), DISP_PRIO_IME3, MSG_SURE_D, 1);
if(btnState[1] != 1)
{
btnId[1] = StockDispBuffer( (mx+189), (my+202), DISP_PRIO_IME3, MSG_CANCEL_U, 1);
ret = InputMsgData();
if(ret>=0) ShowBottomLineString( FONT_PAL_WHITE, MsgHint[ret]);
GetKeyInputFocus(MsgFocus[MsgFocusSw]);
}
}
if(CheckMenuFlag())
{
id = 99;
}
else //<2F><>Esc<73>ر<EFBFBD>
if( (joy_trg[ 0 ] & JOY_ESC) && GetImeString() == NULL)
{
id = 100;
play_se( 203, 320, 240);//<2F>Ӵ<EFBFBD><D3B4>ر<EFBFBD><D8B1><EFBFBD>
}
else //<2F><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ť
if(btnState[1] == 1)
{
id = 100;
play_se( 203, 320, 240);
}
//<2F>رռ<D8B1>Ѷ<EFBFBD>Ӵ<EFBFBD>
if( id >= 0)
{
DeathAction( pActMenuWin);
pActMenuWin = NULL;
if(id == 50)
{
DWORD dwThreadID,dwThrdParam = 1;
MHandle = CreateThread(NULL, 0, MsgThread,&dwThrdParam,0,&dwThreadID);
if(MHandle == NULL)
{
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵϵͳ<EFBFBD><EFBFBD>Դ<EFBFBD>Ѳ<EFBFBD><EFBFBD><EFBFBD>!!",FONT_PAL_RED);
StockChatBufferLine("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>!",FONT_PAL_RED);
return 1;
}
return 2;
}
else
return 1;
}
}
return 0;
}
//************************************************
//<2F><>ʽ<EFBFBD><CABD> : DNSר<53>ú<EFBFBD>ʽ
//<2F>ش<EFBFBD>ֵ : TRUE --- ת<><D7AA><EFBFBD>ɹ<EFBFBD>
// FALSE --- ת<><D7AA>ʧ<EFBFBD><CAA7>
//************************************************
BOOL QueryMyIP(char HostName[])
{
PHOSTENT info;
if( (info = gethostbyname(HostName)) == NULL)
return FALSE;
else
MsgIP = inet_ntoa(*(struct in_addr *)*info->h_addr_list);
return TRUE;
}
#endif