678 lines
18 KiB
C
678 lines
18 KiB
C
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <strings.h>
|
||
#include <sys/types.h>
|
||
#include <sys/socket.h>
|
||
#include <sys/time.h>
|
||
#include <sys/stat.h>
|
||
#include <netinet/in.h>
|
||
#include <arpa/inet.h>
|
||
#include <stdlib.h>
|
||
#include <unistd.h>
|
||
#include <fcntl.h>
|
||
#include <netdb.h>
|
||
#include <errno.h>
|
||
#include "autil.h"
|
||
#include "util.h"
|
||
#include "net.h"
|
||
#include "char.h"
|
||
#include "char_base.h"
|
||
#include "mclient.h"
|
||
#include "log.h"
|
||
#include "handletime.h"
|
||
#include "chatmagic.h"
|
||
|
||
#ifdef _RECAL_ASK_PLAYER // WON ÒªÇóÈËÎï×ÊÁÏ
|
||
#include "saacproto_cli.h"
|
||
#endif
|
||
|
||
#ifdef _M_SERVER
|
||
|
||
#define SEPARATOR ";"
|
||
|
||
#ifdef _GSERVER_RUNTIME
|
||
BOOL gserver_runtime_starttime0_flag = TRUE;
|
||
time_t gserver_runtime_starttime0;
|
||
#endif
|
||
|
||
//Mserver NETProc
|
||
int mproto_ClientDispatchMessage(int fd,char* data)
|
||
{
|
||
int func,fieldcount;
|
||
char raw[65500];
|
||
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
util_DecodeMessage(raw,data);
|
||
util_SplitMessage(raw,SEPARATOR);
|
||
if (!util_GetFunctionFromSlice(&func, &fieldcount)) {
|
||
logHack(fd,HACK_GETFUNCFAIL);
|
||
return -1;
|
||
}
|
||
|
||
if (func==MPROTO_QUE_RECV) {
|
||
int checksum=0, checksumrecv;
|
||
int userfdid;
|
||
char ans[65500],uid[4096];
|
||
checksum += util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_destring(4, ans);
|
||
util_deint(5, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_Que_Recv(fd,uid,userfdid, ans);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
if( func == MPROTO_MESSAGE_RECV ) {
|
||
int checksum=0, checksumrecv;
|
||
int userfdid;
|
||
char ans[65500],uid[4096];
|
||
checksum += util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_destring(4, ans);
|
||
util_deint(5, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_Message_Recv(fd,uid,userfdid, ans);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
if (func==MPROTO_HELLO_RECV) {
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
if (func == MPROTO_NOTALK_RECV) {
|
||
int checksum=0, checksumrecv=0;
|
||
int userfdid,ntime;
|
||
char uid[4096];
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_deint(4, &ntime);
|
||
util_deint(5, &checksumrecv);
|
||
print("notalk here1 sum=%d,recv=%d\n",checksum,checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
print("notalk here2\n");
|
||
mproto_NoTalk_Recv(fd,uid,userfdid, ntime);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
#ifdef _GM_WARP_PLAYER // WON ´«ËÍÍæ¼Ò
|
||
if (func == MPROTO_WARP_RECV) {
|
||
int checksum=0, checksumrecv=0;
|
||
int userfdid,floor,x,y;
|
||
char uid[4096];
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_deint(4, &floor);
|
||
checksum += util_deint(5, &x);
|
||
checksum += util_deint(6, &y);
|
||
util_deint(7, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_WARP_Recv(fd, uid, userfdid, floor, x, y);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _RECAL_ASK_PLAYER // WON ÒªÇóÈËÎï×ÊÁÏ
|
||
|
||
// ÏßÉÏÈËÎï×ÊÁÏ
|
||
if (func == MPROTO_RECALL_PLAYER_RECV) {
|
||
int checksum=0, checksumrecv=0, backup_flag=0;
|
||
int userfdid, char_num, date, GmCliId;
|
||
char uid[4096], id[20];
|
||
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_deint(4, &GmCliId);
|
||
checksum += util_destring(5,id);
|
||
checksum += util_deint(6, &char_num);
|
||
checksum += util_deint(7, &date);
|
||
checksum += util_deint(8, &backup_flag);
|
||
|
||
util_deint(9, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
|
||
mproto_RECALL_ASK_PLAYER_Recv(fd, uid, userfdid, GmCliId, id, char_num, date, backup_flag);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
// ±¸·ÝÈËÎï×ÊÁÏ
|
||
if (func == MPROTO_RECALL_BACKUP_RECV) {
|
||
int checksum=0, checksumrecv=0;
|
||
int userfdid, char_num, date, GmCliId, backup_flag;
|
||
char uid[4096], id[20], char_data[1024];
|
||
|
||
checksum = util_destring(2, uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
checksum += util_deint(4, &GmCliId);
|
||
checksum += util_destring(5,id);
|
||
checksum += util_deint(6, &char_num);
|
||
checksum += util_deint(7, &date);
|
||
checksum += util_destring(8, char_data);
|
||
checksum += util_deint(9, &backup_flag);
|
||
|
||
util_deint(10, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
|
||
mproto_RECALL_BACKUP_PLAYER_Recv(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, backup_flag);
|
||
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
#endif
|
||
|
||
if( func == MPROTO_WAEIKICK_RECV ) {
|
||
int checksum=0, checksumrecv=0, userfdid;
|
||
char uid[4096];
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
util_deint(4, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_WaeiKick_Recv( fd, uid, userfdid);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
if( func == MPROTO_JAIL_RECV ) {
|
||
int checksum=0, checksumrecv=0, userfdid;
|
||
char uid[4096];
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3, &userfdid);
|
||
util_deint(4, &checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_Jail_Recv( fd, uid, userfdid);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
if (func == MPROTO_GMTALK_RECV) {
|
||
int checksum=0,checksumrecv=0;
|
||
int ntime;
|
||
char uid[4096],data[65530];
|
||
checksum = util_destring(2,uid);
|
||
checksum += util_deint(3,&ntime);
|
||
checksum += util_destring(4,data);
|
||
util_deint(5,&checksumrecv);
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
mproto_GMTalk_Recv(fd,uid,ntime,data);
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
|
||
#ifdef _RECAL_SERVER_OFF // WON MSERVER ¹Ø±Õ GS
|
||
if (func == MPROTO_RECALL_SERVER_OFF_RECV) {
|
||
int checksum=0,checksumrecv=0;
|
||
char msg[10];
|
||
|
||
struct tm *newtime;
|
||
time_t long_time;
|
||
int MIN=0, HOUR=0, SEC=0;
|
||
|
||
time( &long_time );
|
||
newtime = localtime( &long_time );
|
||
|
||
HOUR=newtime->tm_hour;
|
||
MIN=newtime->tm_min;
|
||
SEC=newtime->tm_sec;
|
||
|
||
checksum = util_destring(2,msg);
|
||
util_deint(3,&checksumrecv);
|
||
|
||
if (checksum!=checksumrecv) {
|
||
util_DiscardMessage();
|
||
logHack(fd, HACK_CHECKSUMERROR);
|
||
return -1;
|
||
}
|
||
|
||
// ¹Ø»ú
|
||
if( strcmp(msg, "OFF") == 0){
|
||
print("\n\n\n\n\n GM server shoutdown GS !! (%d:%d:%d)\n\n\n\n\n", HOUR, MIN, SEC);
|
||
system( "~/gmsvstop.sh" );
|
||
}
|
||
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
#endif
|
||
|
||
util_DiscardMessage();
|
||
return 0;
|
||
}
|
||
//GM»Ø¸²ÎÊÌâ
|
||
void mproto_Que_Recv(int fd,char* uid,int userfdid,char* ans)
|
||
{
|
||
int fd_charaindex;
|
||
char sGM[256];
|
||
int clifd=getfdFromFdid(userfdid);
|
||
if (clifd == -1) return ;
|
||
if (ans == NULL || uid==NULL) return;
|
||
sprintf(sGM,"GM[%s]ΪÄã½â´ðÈçÏÂ:",uid);
|
||
fd_charaindex = CONNECT_getCharaindex( clifd );
|
||
if (!CHAR_CHECKINDEX(fd_charaindex)) return;
|
||
CHAR_talkToCli(fd_charaindex, -1, sGM, CHAR_COLORYELLOW);
|
||
CHAR_talkToCli(fd_charaindex, -1, ans, CHAR_COLORWHITE);
|
||
|
||
return;
|
||
}
|
||
//GMѶϢ
|
||
void mproto_Message_Recv(int fd,char* uid,int userfdid,char* ans)
|
||
{
|
||
int fd_charaindex;
|
||
char sGM[256];
|
||
int clifd=getfdFromFdid(userfdid);
|
||
if (clifd == -1) return ;
|
||
if (ans == NULL || uid==NULL) return;
|
||
if( !strcmp( uid, "ÎÞ") ) {
|
||
sprintf( sGM, "%s", ans);
|
||
}else{
|
||
sprintf( sGM, "GM[%s]ѶϢ:%s", uid, ans);
|
||
}
|
||
|
||
fd_charaindex = CONNECT_getCharaindex( clifd );
|
||
if (!CHAR_CHECKINDEX(fd_charaindex)) return;
|
||
CHAR_talkToCli(fd_charaindex, -1, sGM, CHAR_COLORRED);
|
||
return;
|
||
}
|
||
|
||
//GM½ûÑÔ
|
||
void mproto_NoTalk_Recv(int fd,char* uid,int userfdid,int nTime)
|
||
{
|
||
int fd_charaindex;
|
||
int clifd=getfdFromFdid(userfdid);
|
||
print("clifd =%d\n",clifd);
|
||
if (clifd == -1) return ;
|
||
if (uid == NULL ) return ;
|
||
fd_charaindex=CONNECT_getCharaindex(clifd);
|
||
if (!CHAR_CHECKINDEX(fd_charaindex)) return;
|
||
CHAR_setInt( fd_charaindex,CHAR_SILENT, nTime );
|
||
CHAR_setWorkInt( fd_charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec );
|
||
CHAR_talkToCli( fd_charaindex, -1, "ÓÉ춵·ÂÒ£¬±»GM½ûÑÔ10µ½30·ÖÖÓ", CHAR_COLORYELLOW);
|
||
CHAR_setWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT, 0 );
|
||
}
|
||
|
||
|
||
#ifdef _GM_WARP_PLAYER // WON ´«ËÍÍæ¼Ò
|
||
void mproto_WARP_Recv(int fd,char* uid,int userfdid,int floor, int x, int y)
|
||
{
|
||
int fd_charaindex;
|
||
int clifd=getfdFromFdid(userfdid);
|
||
print("clifd =%d\n",clifd);
|
||
if (clifd == -1) return ;
|
||
if (uid == NULL ) return ;
|
||
fd_charaindex=CONNECT_getCharaindex(clifd);
|
||
if (!CHAR_CHECKINDEX(fd_charaindex)) return;
|
||
CHAR_warpToSpecificPoint(fd_charaindex, floor, x, y);
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _RECAL_ASK_PLAYER // WON ÒªÇóÈËÎï×ÊÁÏ
|
||
void mproto_RECALL_ASK_PLAYER_Recv(int fd, char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, int backup_flag)
|
||
{
|
||
extern int acfd;
|
||
saacproto_Recal_Player_send(acfd, uid, userfdid, GmCliId, id, char_num, date, backup_flag);
|
||
|
||
}
|
||
|
||
void mproto_RECALL_BACKUP_PLAYER_Recv(int fd, char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, char *char_data, int backup_flag)
|
||
{
|
||
extern int acfd;
|
||
saacproto_Recal_Backup_send(acfd, uid, userfdid, GmCliId, id, char_num, date, char_data, backup_flag);
|
||
|
||
}
|
||
#endif
|
||
|
||
//GM JAIL
|
||
void mproto_Jail_Recv(int fd,char* uid,int userfdid)
|
||
{
|
||
int fd_charaindex;
|
||
int clifd=getfdFromFdid(userfdid);
|
||
if (clifd == -1) return;
|
||
if (uid == NULL ) return;
|
||
fd_charaindex = CONNECT_getCharaindex(clifd);
|
||
if (!CHAR_CHECKINDEX(fd_charaindex))
|
||
return;
|
||
CHAR_talkToCli( fd_charaindex, -1, "ÓÉ춵·ÂÒ£¬±»GM¹ØÈë¼àÀÎ", CHAR_COLORYELLOW);
|
||
CHAR_CHAT_DEBUG_jail( -1, CHAR_getChar( fd_charaindex, CHAR_CDKEY));
|
||
}
|
||
|
||
//GMÌßÈË
|
||
void mproto_WaeiKick_Recv(int fd,char* uid,int userfdid)
|
||
{
|
||
int fd_charaindex;
|
||
int clifd=getfdFromFdid(userfdid);
|
||
if (clifd == -1) return;
|
||
if (uid == NULL ) return;
|
||
fd_charaindex = CONNECT_getCharaindex(clifd);
|
||
if (!CHAR_CHECKINDEX(fd_charaindex))
|
||
return;
|
||
CHAR_talkToCli( fd_charaindex, -1, "ÓÉ춵·ÂÒ£¬±»GMÌß³ý", CHAR_COLORYELLOW);
|
||
CHAR_CHAT_DEBUG_gmkick( -1, CHAR_getChar( fd_charaindex, CHAR_CDKEY));
|
||
}
|
||
//GM¹ã²¥
|
||
void mproto_GMTalk_Recv(int fd,char* uid,int ntime,char* data)
|
||
{
|
||
char message[65530];
|
||
int i;
|
||
int playernum = CHAR_getPlayerMaxNum();
|
||
if (uid == NULL || data == NULL ) return ;
|
||
strcpy(message,"");
|
||
sprintf(message,"GM[%s]:%s",uid,data);
|
||
for( i = 0 ; i < playernum ; i++) {
|
||
if( CHAR_getCharUse(i) != FALSE ) {
|
||
CHAR_talkToCli( i, -1, message, CHAR_COLORWHITE);
|
||
}
|
||
}
|
||
}
|
||
|
||
void mproto_Que_Send( int fd, int uid, int index, char* question)
|
||
{
|
||
char buffer[65500], wheres[256];
|
||
int checksum=0, floor, x, y;
|
||
|
||
char *cdkey = CHAR_getChar( index, CHAR_CDKEY);
|
||
char *charname = CHAR_getChar( index, CHAR_NAME);
|
||
|
||
if( strlen( question) <= 0 ){
|
||
CHAR_talkToCli( index, -1, "×Ö´®³¤¶È²»×㣡", CHAR_COLORYELLOW);
|
||
return;
|
||
}
|
||
memset( wheres, 0, sizeof( wheres));
|
||
floor = CHAR_getInt( index, CHAR_FLOOR);
|
||
x = CHAR_getInt( index, CHAR_X);
|
||
y = CHAR_getInt( index, CHAR_Y);
|
||
sprintf( wheres, "%d,%d,%d", floor, x, y);
|
||
|
||
memset( buffer, 0, sizeof( buffer));
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkint(buffer, uid);
|
||
checksum += util_mkstring(buffer, cdkey);
|
||
checksum += util_mkstring(buffer, charname);
|
||
checksum += util_mkstring(buffer, question);
|
||
checksum += util_mkstring(buffer, wheres);
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(fd, MPROTO_QUE_SEND, buffer);
|
||
}
|
||
|
||
#ifdef _RECAL_ASK_PLAYER // WON ÒªÇóÈËÎï×ÊÁÏ
|
||
|
||
// ÏßÉÏÈËÎï×ÊÁÏ
|
||
void saacproto_ACRecalPlayer_recv(char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, char *char_data)
|
||
{
|
||
char buffer[65500];
|
||
int checksum=0;
|
||
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkstring(buffer, uid);
|
||
checksum += util_mkint(buffer, userfdid);
|
||
checksum += util_mkint(buffer, GmCliId);
|
||
checksum += util_mkstring(buffer, id);
|
||
checksum += util_mkint(buffer, char_num);
|
||
checksum += util_mkint(buffer, date);
|
||
checksum += util_mkstring(buffer, char_data);
|
||
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_PLAYER_SEND, buffer);
|
||
}
|
||
|
||
// ±¸·ÝÈËÎï×ÊÁÏ
|
||
void saacproto_ACRecalBackupPlayer_recv(char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, char *char_data)
|
||
{
|
||
char buffer[65500];
|
||
int checksum=0;
|
||
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkstring(buffer, uid);
|
||
checksum += util_mkint(buffer, userfdid);
|
||
checksum += util_mkint(buffer, GmCliId);
|
||
checksum += util_mkstring(buffer, id);
|
||
checksum += util_mkint(buffer, char_num);
|
||
checksum += util_mkint(buffer, date);
|
||
checksum += util_mkstring(buffer, char_data);
|
||
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_BACKUP_SEND, buffer);
|
||
}
|
||
|
||
// »ØËÝok
|
||
void saacproto_ACRecalAllBackupOK_recv(char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, char *char_data)
|
||
{
|
||
char buffer[65500];
|
||
int checksum=0;
|
||
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkstring(buffer, uid);
|
||
checksum += util_mkint(buffer, userfdid);
|
||
checksum += util_mkint(buffer, GmCliId);
|
||
checksum += util_mkstring(buffer, id);
|
||
checksum += util_mkint(buffer, char_num);
|
||
checksum += util_mkint(buffer, date);
|
||
checksum += util_mkstring(buffer, char_data);
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_BACKUP_OK_SEND, buffer);
|
||
}
|
||
|
||
// È¡µÃ±¸·ÝÈÕÆÚ
|
||
void saacproto_ACRecalBackupDate_recv(char *uid, int userfdid, int GmCliId, char *id, int char_num, int date, char *char_data)
|
||
{
|
||
char buffer[65500];
|
||
int checksum=0;
|
||
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkstring(buffer, uid);
|
||
checksum += util_mkint(buffer, userfdid);
|
||
checksum += util_mkint(buffer, GmCliId);
|
||
checksum += util_mkstring(buffer, id);
|
||
checksum += util_mkint(buffer, char_num);
|
||
checksum += util_mkint(buffer, date);
|
||
checksum += util_mkstring(buffer, char_data);
|
||
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_BACKUP_DATE_SEND, buffer);
|
||
}
|
||
#endif
|
||
|
||
|
||
void mproto_Type_Send( int fd, int playernum, int itemuse)
|
||
{
|
||
char buffer[65500];
|
||
int checksum=0;
|
||
|
||
memset( buffer, 0, sizeof( buffer));
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkint(buffer, playernum);
|
||
checksum += util_mkint(buffer, itemuse);
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(fd, MPROTO_TYPE_SEND, buffer);
|
||
}
|
||
|
||
int connectmServer(char* hostname,unsigned short port)
|
||
{
|
||
struct sockaddr_in sock;
|
||
struct hostent* hoste;
|
||
int fd,lr;
|
||
fd_set fdset,fde;
|
||
struct timeval tmv;
|
||
memset( &sock , 0 , sizeof( struct sockaddr_in ) );
|
||
sock.sin_family = AF_INET;
|
||
sock.sin_port = htons( port );
|
||
|
||
sock.sin_addr.s_addr = inet_addr( hostname );
|
||
if( sock.sin_addr.s_addr == -1 ){
|
||
hoste = gethostbyname( hostname );
|
||
if( hoste == NULL ){
|
||
print( "»ñÈ¡Ö÷»úÃû: %s\n", hostname);
|
||
return -1;
|
||
}
|
||
|
||
memcpy((void*)&sock.sin_addr.s_addr ,
|
||
hoste->h_addr , sizeof(struct in_addr) );
|
||
}
|
||
|
||
fd = socket( AF_INET, SOCK_STREAM , 0 );
|
||
if( fd == -1 ){
|
||
print("Cannot Create Socket( errno:%d)\n",errno );
|
||
return -1;
|
||
}
|
||
|
||
//set the no block
|
||
if ( fcntl(fd,F_SETFL,O_NONBLOCK) == -1 ){
|
||
print("set noblock error!\n");
|
||
return -1;
|
||
}
|
||
|
||
lr = connect(fd,(struct sockaddr*)&sock,sizeof(struct sockaddr_in));
|
||
if( lr != 0 ){
|
||
if ( errno != EINPROGRESS ){
|
||
print("Cannot connect. (errno:%d)\n",errno );
|
||
close(fd);
|
||
return -1;
|
||
}
|
||
}
|
||
|
||
FD_ZERO(&fdset);
|
||
FD_SET(fd,&fdset);
|
||
FD_SET(fd,&fde);
|
||
tmv.tv_sec =3;
|
||
tmv.tv_usec = 0;
|
||
lr=select(fd+1,NULL,&fdset,&fde,&tmv);
|
||
if (FD_ISSET(fd,&fde)){
|
||
print("connectGmsv fde\n");
|
||
close(fd); //add more
|
||
return -1;
|
||
}
|
||
|
||
if ( lr > 0 && FD_ISSET(fd,&fdset)){
|
||
|
||
int errorcode;
|
||
int errorcodelen;
|
||
errorcode=1;
|
||
errorcodelen=sizeof(errorcode);
|
||
getsockopt(fd,SOL_SOCKET,SO_ERROR,&errorcode,&errorcodelen);
|
||
if (errorcode == 0 ){
|
||
fcntl(fd,F_SETFL,0);
|
||
print("connectGmsv return fd=%d\n",fd);
|
||
return fd;
|
||
}else{
|
||
print("connectGmsv errorcode error\n");
|
||
close(fd);
|
||
return -1;
|
||
}
|
||
}else{
|
||
close(fd);
|
||
return -1;
|
||
}
|
||
|
||
}
|
||
|
||
#endif
|
||
|
||
#ifdef _RECAL_SEND_COUNT // WON ´«ËÍGS×ÊѶ
|
||
void recal_get_count()
|
||
{
|
||
FILE *fp;
|
||
int i, j;
|
||
char temp[3][15], c;
|
||
char buffer[256], msg[64];
|
||
int checksum=0;
|
||
|
||
if(mfd == -1) return;
|
||
|
||
if( !(fp=fopen("recal_count.txt", "r")) ){
|
||
print("\n open recal_count.txt err !!");
|
||
}
|
||
|
||
memset(temp, 0, sizeof(temp));
|
||
|
||
i=0; j=0;
|
||
do{
|
||
c = fgetc(fp);
|
||
if(c==' '){
|
||
i=0; j++;
|
||
continue;
|
||
}
|
||
temp[j][i]=c;
|
||
i++;
|
||
}while(c != EOF);
|
||
|
||
temp[2][i-2]=0;
|
||
|
||
sprintf(msg,"%5s%4d%12s", temp[0], atoi(temp[1]), temp[2]);
|
||
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
checksum += util_mkstring(buffer, msg);
|
||
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_COUNT_SEND, buffer);
|
||
|
||
fclose(fp);
|
||
|
||
}
|
||
#endif
|
||
|
||
#ifdef _GSERVER_RUNTIME //´«ËÍGSERVERÖ´ÐжàÉÙʱ¼ä¸øMSERVER
|
||
void gserver_runtime()
|
||
{
|
||
int checksum=0;
|
||
char buffer[1024];
|
||
time_t starttime1;
|
||
|
||
if(mfd == -1) return;
|
||
if( gserver_runtime_starttime0_flag ){
|
||
gserver_runtime_starttime0_flag = FALSE;
|
||
gserver_runtime_starttime0 = time(NULL);
|
||
}
|
||
print("\nChange->´«ËÍʱ¼ä¸ømserver\n");
|
||
strcpy(buffer, "");
|
||
strcpy(PersonalKey, MSPERSIONALKEY);
|
||
starttime1 = time(NULL);
|
||
checksum += util_mkint(buffer, (int)difftime(starttime1,gserver_runtime_starttime0));//´«Ë͵ĵ¥Î»ÎªÃë
|
||
util_mkint(buffer, checksum);
|
||
util_SendMesg(mfd, MPROTO_RECALL_GSERVER_RUNTIME, buffer);
|
||
}
|
||
#endif
|