2020-06-23 15:53:23 +08:00
|
|
|
|
//==========================================================================
|
|
|
|
|
// 档名 : PhoneMsg.cpp
|
|
|
|
|
// 功用 : 石器时代[简讯]按钮的功能实作(V3.0后新增的功能)
|
|
|
|
|
// 撰写人 : 林 昌 磊 (Leiboy)
|
|
|
|
|
// 初版完成日期 : 2002年01月26日
|
|
|
|
|
// 第二版更新日期 : 2002年02月02日==>新增Multithread(函式五)
|
|
|
|
|
// 第三版更新日期 : 2002年02月20日==>将MFC改写成Winsock方式!(本版为已完成版!)
|
|
|
|
|
// 第四版完成日期 : 2002年02月26日==>新增DNS(函式七)
|
|
|
|
|
// 线上正式运作日期 : 2002年03月04日
|
|
|
|
|
// 补充说明 : 游戏中成功地传送一通简讯每次将扣WGS点数五点!
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//==========================================================================
|
|
|
|
|
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//先做版本的控制
|
2020-06-23 15:27:59 +08:00
|
|
|
|
#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"
|
|
|
|
|
|
2020-06-23 15:53:23 +08:00
|
|
|
|
#define MSG_SURE_D 26288 //确定(按下)(黄色的)
|
|
|
|
|
#define MSG_SURE_U 26289 //确定(弹起)(黄色的)
|
|
|
|
|
#define MSG_CANCEL_U 26284 //取消(未按下)
|
|
|
|
|
#define MSG_CANCEL_D 26285 //取消(按下)
|
|
|
|
|
#define MSG_CLEAR_U 26298 //清除(弹起)
|
|
|
|
|
#define MSG_CLEAR_D 26299 //清除(按下)
|
2020-06-23 15:27:59 +08:00
|
|
|
|
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//Messsage 的Log 专用区 Begin
|
2020-06-23 15:27:59 +08:00
|
|
|
|
#ifdef _STONDEBUG_
|
|
|
|
|
char logstr[512];
|
|
|
|
|
#define logfilename "message.log"
|
|
|
|
|
#endif
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//Messsage 的Log 专用区 End
|
2020-06-23 15:27:59 +08:00
|
|
|
|
|
|
|
|
|
BOOL QueryMyIP(char HostName[]);
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//石器简讯Server IP : 210.64.97.17
|
2020-06-23 15:27:59 +08:00
|
|
|
|
char *MsgIP;
|
|
|
|
|
#define SMSDomainName "sms.hwaei.com.tw"
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//目前所采用的ASP filename
|
|
|
|
|
#define ASPname "//sms//stoneage.asp" //2002 Feb. 20后启用!
|
2020-06-23 15:27:59 +08:00
|
|
|
|
int myvalue;
|
|
|
|
|
char seqno[14]; //Wayia_seqno
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式一 : 处理主程式与ASP间沟通的专用函式
|
|
|
|
|
//回传值 : 0 --- 处理完毕 & 简讯发送成功
|
|
|
|
|
// 1 --- 简讯发送失败
|
|
|
|
|
// 2 --- 手机号码参数错误
|
|
|
|
|
// 3 --- 手机讯息参数错误(过长)
|
|
|
|
|
// 4 --- 网路端错误
|
|
|
|
|
// 5 --- WGS点数(或通数)已不足!!(小于五点)
|
|
|
|
|
// 6 --- 连线逾时(或DNS失败)
|
|
|
|
|
// 7 --- ASP回传错误
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
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;
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//和Jason讨论后,新订的文字上限为66bytes!! Feb. 5,2002
|
|
|
|
|
//保留16bytes给玩家名称用! Feb.22,2002
|
2020-06-23 15:27:59 +08:00
|
|
|
|
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
|
|
|
|
|
|
2020-06-23 15:53:23 +08:00
|
|
|
|
#ifdef _FIX_URLENCODE // WON ADD 北京修正简讯无法加空格的问题
|
2020-06-23 15:27:59 +08:00
|
|
|
|
{
|
|
|
|
|
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_
|
2020-06-23 15:53:23 +08:00
|
|
|
|
lstrcpy(logstr,"失败 ");
|
2020-06-23 15:27:59 +08:00
|
|
|
|
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_
|
2020-06-23 15:53:23 +08:00
|
|
|
|
lstrcpy(logstr,"成功-");
|
2020-06-23 15:27:59 +08:00
|
|
|
|
lstrcat(logstr,seqno);
|
|
|
|
|
lstrcat(logstr," ");
|
|
|
|
|
lstrcat(logstr,pps);
|
|
|
|
|
sprintf_s(logstr,"%s %s",logstr,extpms);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式二 : 产生Log档(于Local端目录下)的专用函式
|
|
|
|
|
//回传值 : None
|
|
|
|
|
//附 注 : 只有Debug mode才在硬碟写入log档!!
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
#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;
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式三 : 资料输入栏位的初始化函式
|
|
|
|
|
//回传值 : None
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式四 : 处理资料输入栏位的主函式
|
|
|
|
|
//回传值 : None
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
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[];
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式五 : 处理Multithread的主函式
|
|
|
|
|
//回传值 : OL
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
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:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("本则简讯传送失败!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("请您重新操作!!",FONT_PAL_WHITE);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("手机号码格式错误!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("无法发送本则简讯!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 3:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("手机讯息过长!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("无法发送本则简讯!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 4:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("网路发生错误!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("无法发送本则简讯!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 5:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("您的WGS点数(或通数)已不足!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("无法发送本则简讯!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 6:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("简讯服务器无法连结!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("请您稍后再试...",FONT_PAL_WHITE);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case 7:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("简讯服务器没有正确地回应!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("无法确定本则简讯是否成功?!",FONT_PAL_WHITE);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
case -1:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("程式内部错误!!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("本则简讯传送失败!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
break;
|
|
|
|
|
default:
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("简讯已经送出了!",FONT_PAL_YELLOW);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
}
|
|
|
|
|
#ifdef _STONDEBUG_
|
|
|
|
|
if(logstr[0] != 0) WriteLog(logstr,logfilename);
|
|
|
|
|
#endif
|
|
|
|
|
msgBtn=0;
|
|
|
|
|
CloseHandle(MHandle);
|
|
|
|
|
ExitThread(0);
|
|
|
|
|
return 0L;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int MsgID;
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式六 : 手机简讯功能的主要函式
|
|
|
|
|
//回传值 : 0 --- 视窗OPEN
|
|
|
|
|
// 1 --- 视窗CLOSE
|
|
|
|
|
// 2 --- 按下确定的结束
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
int MsgProc()
|
|
|
|
|
{
|
|
|
|
|
int id , i , ret;
|
|
|
|
|
static int btnId[3];
|
|
|
|
|
static int btnState[2];
|
|
|
|
|
static DWORD dwPressTime;
|
|
|
|
|
static ACTION *pActMenuWin = NULL;
|
2020-06-23 15:53:23 +08:00
|
|
|
|
char MsgHint[][30] = {"对方的手机号码。","简讯内容(最多50中/英字)。","送出简讯。","关闭简讯视窗。","清空简讯内容。"};
|
2020-06-23 15:27:59 +08:00
|
|
|
|
|
|
|
|
|
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();
|
2020-06-23 15:53:23 +08:00
|
|
|
|
play_se( 217, 320, 240); //按钮声
|
2020-06-23 15:27:59 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
2020-06-23 15:53:23 +08:00
|
|
|
|
else //按Esc关闭
|
2020-06-23 15:27:59 +08:00
|
|
|
|
if( (joy_trg[ 0 ] & JOY_ESC) && GetImeString() == NULL)
|
|
|
|
|
{
|
|
|
|
|
id = 100;
|
2020-06-23 15:53:23 +08:00
|
|
|
|
play_se( 203, 320, 240);//视窗关闭声
|
2020-06-23 15:27:59 +08:00
|
|
|
|
}
|
2020-06-23 15:53:23 +08:00
|
|
|
|
else //按下取消钮
|
2020-06-23 15:27:59 +08:00
|
|
|
|
if(btnState[1] == 1)
|
|
|
|
|
{
|
|
|
|
|
id = 100;
|
|
|
|
|
play_se( 203, 320, 240);
|
|
|
|
|
}
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//关闭简讯视窗
|
2020-06-23 15:27:59 +08:00
|
|
|
|
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)
|
|
|
|
|
{
|
2020-06-23 15:53:23 +08:00
|
|
|
|
StockChatBufferLine("您的作业系统资源已不足!!",FONT_PAL_RED);
|
|
|
|
|
StockChatBufferLine("本则简讯发送失败!",FONT_PAL_RED);
|
2020-06-23 15:27:59 +08:00
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
return 2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//************************************************
|
2020-06-23 15:53:23 +08:00
|
|
|
|
//函式七 : DNS专用函式
|
|
|
|
|
//回传值 : TRUE --- 转换成功
|
|
|
|
|
// FALSE --- 转换失败
|
2020-06-23 15:27:59 +08:00
|
|
|
|
//************************************************
|
|
|
|
|
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
|