📄 saacproto_lserver.c
字号:
if( SAMESS_getChar( si, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pcdkey, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pid, &lens) == FALSE ) return 0; if( SAMESS_getChar( name, &lens) == FALSE ) return 0; if( SAMESS_getChar( flg, &lens) == FALSE ) return 0; if( SAMESS_getChar( PASS, &lens) == FALSE ) return 0; LServer_SACheckLock2_recv( si, Pcdkey, Pid, name, flg, PASS); return 0; } if( !strcmp( funcname , "SALock" )){ char si[256], Pcdkey[256], Pid[256], name[256], flg[256]; if( SAMESS_getChar( si, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pcdkey, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pid, &lens) == FALSE ) return 0; if( SAMESS_getChar( name, &lens) == FALSE ) return 0; if( SAMESS_getChar( flg, &lens) == FALSE ) return 0; LServer_SALock_recv( si, Pcdkey, Pid, name, flg); return 0; } if( !strcmp( funcname , "SAUNLock" )){ char si[256], Pcdkey[256], Pid[256], flg[256]; if( SAMESS_getChar( si, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pcdkey, &lens) == FALSE ) return 0; if( SAMESS_getChar( Pid, &lens) == FALSE ) return 0; if( SAMESS_getChar( flg, &lens) == FALSE ) return 0; LServer_SAUNLock_recv( si, Pcdkey, Pid, flg); return 0; } if( !strcmp( funcname , "SAUCheck" )){ //check char PCDKEY[256]; if( SAMESS_getChar( PCDKEY, &lens) == FALSE ) return 0; LServer_SAUCheck_recv( PCDKEY); return 0; } return -1;}BOOL SAMESS_setChar( char *buf){ char Mbuf[4096]; int i=0,j=0; int len=0; SAMessC *Works; SAMessC *point; point = NULL; memset( Mbuf, 0, sizeof( Mbuf)); sprintf( Mbuf, "%s", buf); SAMess = NULL; while( Mbuf[i] != '\0' ) { if( Mbuf[i] == '\n' ) Mbuf[i] = '\0'; i++; } i=0; len = 0; while( Mbuf[i] != '\0' && Mbuf[j] != '\0' ) { j=i; len = 0; while( Mbuf[j] != ' ' && Mbuf[j] != '\0') { len++; j++; } Works = MESS_getNew(); if( Works == NULL ) return FALSE; memcpy( Works->buf, &Mbuf[i], len); Works->len = len; if( SAMess == NULL ) { SAMess = Works; point = Works; }else { point->next = Works; point = point->next; } i = (j+1); } return TRUE;}BOOL SAMESS_getChar( char *buf, int *len){ SAMessC *Works; Works = SAMess; *len = 0; if( Works == NULL ) return FALSE; sprintf( buf, "%s", Works->buf); *len = Works->len; SAMess = Works->next; free( Works); return TRUE;}SAMessC *MESS_getNew(){ SAMessC *MBUF=NULL; MBUF = (SAMessC *) calloc( 1, sizeof( struct _SAMessCommand) ); if( MBUF == NULL ) return NULL; memset( MBUF->buf, 0, sizeof( MBUF->buf)); MBUF->len = 0; MBUF->next = NULL; return MBUF;}void LServer_SALogin_send(){ //Ls.data[LS_FD] char buf[4096]; sprintf( buf, "SALogin %s %d %s\n", SaName, 0, "LOGIN"); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!"); }}void LServer_SACheckLock1_recv( char *si, char *Pcdkey, char *Pid, char *flg, char *PASS){#ifndef _TEST_LOCKSERVER int Pfd, Flg, seri; char listbuf[CHARDATASIZE]; Pfd = atoi( Pid); Flg = atoi( flg); seri = atoi( si); if( !strcmp( flg, "LOCKED") ) { saacproto_ACCharList_send( seri , FAILED , "locked" , Pfd ); total_ng_charlist++; }else { loadCharNameAndOption( Pcdkey , listbuf,sizeof(listbuf)); saacproto_ACCharList_send( seri , SUCCESSFUL , listbuf , Pfd); total_ok_charlist++; }#endif}void LServer_SACheckLock1_send( int ti, char *Pcdkey, int Pid, int flg){ char buf[4096]; sprintf( buf, "SACheckLock1 %d %s %d %d %s\n", ti, Pcdkey, Pid, flg, "CHECK"); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!"); }}void LServer_SACheckLock2_send( int ti, char *Pcdkey, int Pid, char *charname, int flg, char *pro){ char buf[4096]; sprintf( buf, "SACheckLock2 %d %s %d %s %d %s\n", ti, Pcdkey, Pid, charname, flg, pro); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!"); }}void LServer_SACheckLock2_recv( char *si, char *Pcdkey, char *Pid, char *name, char *flg, char *pro){#ifndef _TEST_LOCKSERVER int Pfd, Flg, seri; int charindex=-1; char loadbuf[CHARDATASIZE]; char infobuf[CHARDATASIZE]; Pfd = atoi( Pid); Flg = atoi( flg); seri = atoi( si);#define IS_2BYTEWORD( _a_ ) ( (char)(0x80) <= (_a_) && (_a_) <= (char)(0xFF) ) if( !strcmp( flg, "LOCKED") ) { saacproto_ACCharLoad_send( seri , FAILED , "locked" , Pfd, charindex ); }else { int lock = 1; charindex = getCharIndexByName( Pcdkey , name ); if( charindex < 0 ){ saacproto_ACCharLoad_send( seri , FAILED , "char nonexistent" , Pfd , charindex ); return; } log( "loadCharOne: id:[%s] char:[%s]\n", Pcdkey, name ); if( loadCharOne( Pcdkey , charindex , loadbuf ,sizeof( loadbuf ))<0){ saacproto_ACCharLoad_send( seri , FAILED , "cannot load ( disk i/o error?)", Pfd, charindex ); return; } {//ttom char *c_ptr; c_ptr=loadbuf; while(*c_ptr!='\0'){ if( IS_2BYTEWORD(*c_ptr) ){ if(*(c_ptr+1)==' '){ *(c_ptr+1)=0x41; } c_ptr++; if(*c_ptr=='\0') break; } c_ptr++; } }//ttom if( lock ){ char result[100]; char retdata[100];#ifdef _LOCK_ADD_NAME if( lockUser( getGSName(seri) , Pcdkey , name , passwd , 1 , result , sizeof( result ) , retdata , sizeof( retdata ) , pro , "0")<0){#else if( lockUser( getGSName(seri) , Pcdkey , passwd , 1 , result , sizeof( result ) , retdata , sizeof( retdata ) , pro , "0")<0){#endif saacproto_ACCharLoad_send( seri , FAILED , "lock FAIL" , Pfd, charindex ); log(" SAAC lock %s|%s FAIL!!\n", getGSName(seri), Pcdkey); return; } } //LS LOCK if( CHECK_LS_BEUSE() == TRUE ) { LServer_SALock_send( seri, Pcdkey, Pfd, name, 1); } memset( infobuf , 0 , sizeof( infobuf )); getCharInfoFromString( loadbuf , infobuf ); makeStringFromEscaped( infobuf ); saacproto_ACCharLoad_send( seri , SUCCESSFUL , infobuf , Pfd, charindex ); }#endif}void LServer_SALock_recv( char *si, char *Pcdkey, char *Pid, char *name, char *flg){ int Pfd, seri; Pfd = atoi( Pid); seri = atoi( si); if( !strcmp( flg, "FAIL") ) { log( "LS Lock %s|%s FAIL!!\n", getGSName(seri), Pcdkey); }}void LServer_SALock_send( int ti, char *Pcdkey, int Pid, char *Pname, int flg){ //si[256], SANAME[256], PCDKEY[256], PNAME[256], FLG[256]; char buf[4096]; sprintf( buf, "SALock %d %s %s %d %s %d\n", ti, SaName, Pcdkey, Pid, Pname, flg); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!"); }}void LServer_SAUNLock_recv( char *si, char *Pcdkey, char *Pid, char *flg){ int Pfd, seri; Pfd = atoi( Pid); seri = atoi( si); if( !strcmp( flg, "FAIL") ) { log( "LS UNLock %s|%s FAIL!!\n", getGSName(seri), Pcdkey); }}void LServer_SAUNLock_send( int ti, char *Pcdkey, int Pid, int flg){ char buf[4096]; sprintf( buf, "SAUNLock %d %s %s %d %d\n", ti, SaName, Pcdkey, Pid, flg); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!\n"); }}void LServer_SAUCheck_recv( char *Pcdkey){ if( isLocked( Pcdkey ) ){ saacproto_SAUCheck_send( Pcdkey, 1); checkGSUCheck( Pcdkey ); return; }else { saacproto_SAUCheck_send( Pcdkey, 0); return; }}void saacproto_SAUCheck_send( char *Pcdkey, int flg){ char buf[4096]; sprintf( buf, "SAUCheck %s %s %d\n", SaName, Pcdkey, flg); if( Add_LS_WRMemBuffer( buf, sizeof( buf), MEMWRITE) == FALSE ) { log( "LS WRITE ERROR!!"); }}void DefTimeC( char *buf, int flg)// 1 比较 2 秀时间 0 替换{ static long int dTimes = 0; time_t defLsTime; defLsTime = time(NULL); if( flg == 1 ) { if( defLsTime != dTimes ) { log( "Time[%s]:%ld|%ld|%ld..\n", buf, defLsTime, dTimes, (defLsTime-dTimes)); dTimes = defLsTime; } }else if( flg == 2 ) { log( "Time[%s]:%ld..\n", buf, defLsTime); }else { dTimes = defLsTime; }}void REreadConfig( char *path ){ char buf[2048]; FILE *fp; fp = fopen( path , "r" ); if( fp == NULL ) return; while( fgets( buf , sizeof( buf ) , fp )){ char command[1024]; char param[2048]; chop(buf); easyGetTokenFromString( buf , 1 , command , sizeof( command )); easyGetTokenFromString( buf , 2 , param , sizeof( param )); if( strcmp( command, "SANAME" ) == 0 ){ snprintf( SaName, sizeof( SaName ), param ); } else if( strcmp( command, "LSADDRESS" ) == 0 ){ snprintf( LSADDRESS, sizeof( LSADDRESS ), param ); } else if( strcmp( command, "LSPORT" ) == 0 ){ LSPORT = atoi( param); } } fclose(fp);}#ifdef _TEST_LOCKSERVERvoid TEST_TOLOCKSERVER(){ static int po=0; static time_t defLsTime; //char charname[256]={"ankoo"}; //char Pcdkey[256]; int mesgid = -1; int seri=-1; if( !Ls.data[LS_USE] ) return; if( defLsTime == time( NULL) ) return; defLsTime = time( NULL); //sprintf( Pcdkey,"%s", charname); switch( po) { case 0: LServer_SACheckLock1_send( seri, TESTNAME, mesgid, 1); LServer_SACheckLock2_send( seri, TESTNAME, mesgid, TESTNAME, 1, "-1"); break; case 1: LServer_SALock_send( seri, TESTNAME, mesgid, TESTNAME, 1); break; case 2: LServer_SAUNLock_send( seri, TESTNAME, mesgid, 1); break; } po++; po = po%3; }#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -