⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mjgps.c

📁 我搜集到的一个java常用类库的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    if ((baduser_fp = fopen (BADUSER_FILE, "r")) == NULL)    {	sprintf (msg_buf, "Cannot open file %s", BADUSER_FILE);	err (msg_buf);	return 1;    }    strcpy (from, lookup (&(player[player_id].addr)));    sprintf (email, "%s@", player[player_id].username);    strcat (email, from);        while (fgets (msg_buf, 80, baduser_fp) != NULL)    {	msg_buf[strlen (msg_buf) - 1] = 0;	if (strcmp (email, msg_buf) == 0 ||	    strcmp (player[player_id].username, msg_buf) == 0)	{	    display_msg (player_id,		  "你已被限制进入, 有问题请 mail 给 sywu@csie.nctu.edu.tw");	    fclose (baduser_fp);	    return 0;	}    }    fclose (baduser_fp);    return 1;}voidwrite_record (){    char msg_buf[255];    if ((fp = fopen (RECORD_FILE, "r+b")) == NULL)    {	sprintf (msg_buf, "(write_record) Cannot open file!");	err (msg_buf);	return;    }    fseek (fp, sizeof (record) * record.id, 0);    fwrite (&record, sizeof (record), 1, fp);    fclose (fp);}voidprint_news (int fd, char *name){    FILE *news_fp;    char msg[255];    char msg_buf[255];    if ((news_fp = fopen (name, "r")) == NULL)    {	sprintf (msg_buf, "Cannot open file %s\n", NEWS_FILE);	err (msg_buf);	return;    }    while (fgets (msg, 80, news_fp) != NULL)    {	msg[strlen (msg) - 1] = 0;	strcpy (msg_buf, "101");	strcat (msg_buf, msg);	write_msg (fd, msg_buf);    }    fclose (news_fp);}voidwelcome_user (int player_id){    char msg_buf[255];    int fd;    int total_num = 0;    int online_num = 0;    int i;    struct player_record tmp_rec;    fd = player[player_id].sockfd;    if (strcmp (player[player_id].version, "093") < 0 ||	player[player_id].version[0] == 0)    {	write_msg (player[player_id].sockfd,		   "101请使用 QKMJ Ver 0.93 Beta 以上版本上线");	write_msg (player[player_id].sockfd, "010");	return;    }    sprintf (msg_buf, "101★★★★★ 欢迎 %s 来到QK麻将  ★★★★★",	     player[player_id].name);    write_msg (player[player_id].sockfd, msg_buf);    print_news (player[player_id].sockfd, NEWS_FILE);    if (record.money < 15000 && record.game_count >= 16)    {	record.money = 15000;	write_msg (fd, "101运气不太好是吗? 将你的金额提升为 15000, 好好加油!");	write_record ();    }    player[player_id].id = record.id;    player[player_id].money = record.money;    player[player_id].login = 2;    player[player_id].note[0] = 0;    if ((fp = fopen (RECORD_FILE, "rb")) == NULL)    {	sprintf (msg_buf, "(welcome) cannot open file\n");	err (msg_buf);    }    else    {	rewind (fp);	while (!feof (fp) && fread (&tmp_rec, sizeof (tmp_rec), 1, fp))	{	    if (tmp_rec.name[0] != 0)		total_num++;	}	fclose (fp);    }    for (i = 1; i < MAX_PLAYER; i++)    {	if (player[i].login == 2)	    online_num++;    }    sprintf (msg_buf, "101◇目前上线人数: %d 人       注册人数: %d 人", online_num,	     total_num);    write_msg (player[player_id].sockfd, msg_buf);    list_stat (player[player_id].sockfd, player[player_id].name);    write_msg (player[player_id].sockfd, "003");    sprintf (msg_buf, "120%5d%ld", player[player_id].id, player[player_id].money);    write_msg (player[player_id].sockfd, msg_buf);    player[player_id].input_mode = CMD_MODE;}intfind_user_name (char *name){    int i;    for (i = 1; i < MAX_PLAYER; i++)    {	if (strcmp (player[i].name, name) == 0)	    return i;    }    return -1;}voidgps_processing (){    int alen;    int fd, nfds;    int player_id;    int player_num = 0;    int i, j;    int msg_id;    int read_code;    char tmp_buf[80];    char msg_buf[255];    unsigned char buf[256];    struct timeval timeout;    struct hostent *hp;    long time ();    int id;    struct timeval tm;    long current_time;    struct tm *tim;    log_level = 0;    nfds = getdtablesize ();    nfds = 256;    printf ("%d\n", nfds);    FD_ZERO (&afds);    FD_SET (gps_sockfd, &afds);    bcopy ((char *) &afds, (char *) &rfds, sizeof (rfds));    tm.tv_sec = 0;    tm.tv_usec = 0;    /*     * Waiting for connections      */    for (;;)    {	bcopy ((char *) &afds, (char *) &rfds, sizeof (rfds));	if (select (nfds, &rfds, (fd_set *) 0, (fd_set *) 0, 0) < 0)	{	    sprintf (msg_buf, "select: %d %s\n", errno, sys_errlist[errno]);	    err (msg_buf);	    continue;	}	if (FD_ISSET (gps_sockfd, &rfds))	{	    for (player_num = 1; player_num < MAX_PLAYER; player_num++)		if (!player[player_num].login)		    break;	    if (player_num == MAX_PLAYER - 1)		err ("Too many users");	    player_id = player_num;	    alen = sizeof (player[player_num].addr);	    player[player_id].sockfd = accept (gps_sockfd, (struct sockaddr *)					   &player[player_num].addr, &alen);	    FD_SET (player[player_id].sockfd, &afds);	    fcntl (player[player_id].sockfd, F_SETFL, FNDELAY);	    player[player_id].login = 1;	    strcpy (climark, lookup (&(player[player_id].addr)));	    sprintf (msg_buf, "Connectted with %s\n", climark);	    err (msg_buf);	    time (&current_time);	    tim = localtime (&current_time);/* * if(tim->tm_hour>=2 && tim->tm_hour<6) * { * for(i=1;i<MAX_PLAYER;i++) * { * if(player[i].login) * { * print_news(player[i].sockfd,"opentime.lst"); * close_id(i); * } * } * } */	    if (player_id > login_limit)	    {		if (strcmp (climark, "ccsun34") != 0)		{		    write_msg (player[player_id].sockfd, "101对不起,目前使用人数超过上限, 请稍後再进来.");		    print_news (player[player_id].sockfd, "server.lst");		    close_id (player_id);		}	    }	}	for (player_id = 1; player_id < MAX_PLAYER; player_id++)	{	    if (player[player_id].login)		if (FD_ISSET (player[player_id].sockfd, &rfds))		{		    /*		     * Processing the player's information 		     */		    read_code = read_msg (player[player_id].sockfd, buf);		    if (!read_code)		    {			close_id (player_id);		    }		    else if (read_code == 1)		    {			msg_id = convert_msg_id (player_id, buf);			switch (msg_id)			{			case 99:	/*					 * get username 					 */			    buf[15] = 0;			    strcpy (player[player_id].username, buf + 3);			    break;			case 100:	/*					 * check version 					 */			    *(buf + 6) = 0;			    strcpy (player[player_id].version, buf + 3);			    break;			case 101:	/*					 * user login 					 */			    buf[13] = 0;			    strcpy (player[player_id].name, buf + 3);			    for (i = 0; i < strlen (buf) - 3; i++)			    {				if (buf[3 + i] <= 32 && buf[3 + i] != 0)				{				    write_msg (player[player_id].sockfd, "101Invalid username!");				    close_id (player_id);				    break;				}			    }			    for (i = 1; i < MAX_PLAYER; i++)			    {				if (player[i].login == 2 && strcmp (player[i].name, buf + 3) == 0)				{				    write_msg (player[player_id].sockfd, "006");				    goto multi_login;				}			    }			    if (read_user_name (player[player_id].name))			    {				write_msg (player[player_id].sockfd, "002");			    }			    else			    {				write_msg (player[player_id].sockfd, "005");			    }			  multi_login:;			    break;			case 102:	/*					 * Check password 					 */			    if (read_user_name (player[player_id].name))			    {				*(buf + 11) = 0;				if (checkpasswd (record.password, buf + 3))				{				    for (i = 1; i < MAX_PLAYER; i++)				    {					if (player[i].login == 2 &&					    strcmp (player[i].name, player[player_id].name) == 0)					{					    close_id (i);					    break;					}				    }				    time (&record.last_login_time);				    record.last_login_from[0] = 0;				    if (player[player_id].username[0] != 0)				    {					sprintf (record.last_login_from, "%s@",						 player[player_id].username);				    }				    strcat (record.last_login_from,					    lookup (&player[player_id].addr));				    record.login_count++;				    write_record ();				    if (check_user (player_id))					welcome_user (player_id);				    else					close_id (player_id);				}				else				{				    write_msg (player[player_id].sockfd, "004");				}			    }			    break;			case 103:	/*					 * Create new account 					 */			    *(buf + 11) = 0;			    if (!add_user (player_id, player[player_id].name, buf + 3))			    {				close_id (player_id);				break;			    }			    welcome_user (player_id);			    break;			case 104:	/*					 * Change password 					 */			    *(buf + 11) = 0;			    read_user_name (player[player_id].name);			    strcpy (record.password, genpasswd (buf + 3));			    write_record ();			    break;			case 2:			    list_player (player[player_id].sockfd);			    break;			case 3:			    list_table (player[player_id].sockfd, 1);			    break;			case 4:			    strcpy (player[player_id].note, buf + 3);			    break;			case 5:			    list_stat (player[player_id].sockfd, buf + 3);			    break;			case 6:			    who (player[player_id].sockfd, buf + 3);			    break;			case 7:			    broadcast (player_id, buf + 3);			    break;			case 8:			    invite (player_id, buf + 3);			    break;			case 9:			    send_msg (player_id, buf + 3);			    break;			case 10:			    lurker (player[player_id].sockfd);			    break;			case 11:			    /*			     * Check for table server  			     */			    for (i = 1; i < MAX_PLAYER; i++)			    {				if (player[i].login == 2 && player[i].serv)				{				    /*				     * Find the name of table server 				     */				    if (strcmp (player[i].name, buf + 3) == 0)				    {					if (player[i].serv >= 4)					{					    write_msg (player[player_id].sockfd, "101此桌人数已满!");					    goto full;					}					sprintf (msg_buf, "120%5d%ld", player[player_id].id,						 player[player_id].money);					write_msg (player[i].sockfd, msg_buf);					sprintf (msg_buf, "211%s", player[player_id].name);					write_msg (player[i].sockfd, msg_buf);					sprintf (msg_buf, "0110%s %d",						 inet_ntoa (player[i].addr.sin_addr), player[i].port);					write_msg (player[player_id].sockfd, msg_buf);					player[player_id].join = i;					player[player_id].serv = 0;					player[i].serv++;					break;				    }				}			    }			    if (i == MAX_PLAYER)				write_msg (player[player_id].sockfd, "0111");			  full:;			    break;			case 12:			    player[player_id].port = atoi (buf + 3);			    if (player[player_id].join)			    {				if (player[player[player_id].join].serv > 0)				    player[player[player_id].join].serv--;				player[player_id].join = 0;			    }			    /*			     * clear all client 			     */			    for (i = 1; i < MAX_PLAYER; i++)			    {				if (player[i].join == player_id)				    player[i].join = 0;			    }			    player[player_id].serv = 1;			    break;			case 13:			    list_table (player[player_id].sockfd, 2);			    break;			case 20:			    strcpy (msg_buf, buf + 3);			    *(msg_buf + 5) = 0;			    id = atoi (msg_buf);			    read_user_id (id);			    record.money = atol (buf + 8);			    record.game_count++;			    write_record ();			    for (i = 1; i < MAX_PLAYER; i++)			    {				if (player[i].login == 2 && player[i].id == id)				{				    player[i].money = record.money;				    break;				}			    }			    break;			case 21:	/*					 * FIND 					 */			    find_user (player[player_id].sockfd, buf + 3);			    break;			case 111:/* * player[player_id].serv++; */			    break;			case 200:			    close_id (player_id);			    break;			case 202:			    if (strcmp (player[player_id].name, "candle") != 0)				break;			    id = find_user_name (buf + 3);			    if (id >= 0)			    {				write_msg (player[id].sockfd, "200");				close_id (id);			    }			    break;			case 205:			    if (player[player_id].serv)			    {				/*				 * clear all client 				 */				for (i = 1; i < MAX_PLAYER; i++)				{				    if (player[i].join == player_id)					player[i].join = 0;				}				player[player_id].serv = 0;				player[player_id].join = 0;			    }			    else if (player[player_id].join)			    {				if (player[player[player_id].join].serv > 0)				    player[player[player_id].join].serv--;				player[player_id].join = 0;			    }			    break;			case 500:			    if (strcmp (player[player_id].name, "candle") == 0)				shutdown_server ();			    break;			default:			    sprintf (msg_buf, "### cmd=%d player_id=%d sockfd=%d ###\n", msg_id, player_id, player[player_id].sockfd);			    err (msg_buf);			    close_connection (player_id);			    sprintf (msg_buf, "Connection to %s error, closed it\n",				     lookup (&(player[player_id].addr)));			    err (msg_buf);			    break;			}			buf[0] = '\0';		    }		}	}    }}voidclose_id (int player_id){    char msg_buf[255];    close_connection (player_id);    sprintf (msg_buf, "Connection to %s closed\n",	     lookup (&(player[player_id].addr)));    err (msg_buf);}voidclose_connection (int player_id){    close (player[player_id].sockfd);    FD_CLR (player[player_id].sockfd, &afds);    if (player[player_id].join && player[player[player_id].join].serv)	player[player[player_id].join].serv--;    player[player_id].login = 0;    player[player_id].serv = 0;    player[player_id].join = 0;    player[player_id].version[0] = 0;    player[player_id].note[0] = 0;    player[player_id].name[0] = 0;    player[player_id].username[0] = 0;}voidshutdown_server (){    int i;    char msg_buf[255];    for (i = 1; i < MAX_PLAYER; i++)    {	if (player[i].login)	    shutdown (player[i].sockfd, 2);    }    sprintf (msg_buf, "QKMJ Server shutdown\n");    err (msg_buf);    exit (0);}voidcore_dump (){    err ("CORE DUMP!\n");    exit (0);}voidbus_err (){    err ("BUS ERROR!\n");    exit (0);}voidbroken_pipe (){    err ("Broken PIPE!!\n");}voidtime_out (){    timeup = 1;}char *genpasswd (char *pw){    char saltc[2];    long salt;    int i, c;    static char pwbuf[14];    long time ();    char *crypt ();    if (strlen (pw) == 0)	return "";    time (&salt);    salt = 9 * getpid ();#ifndef lint    saltc[0] = salt & 077;    saltc[1] = (salt >> 6) & 077;#endif    for (i = 0; i < 2; i++)    {	c = saltc[i] + '.';	if (c > '9')	    c += 7;	if (c > 'Z')	    c += 6;	saltc[i] = c;    }    strcpy (pwbuf, pw);    return crypt (pwbuf, saltc);}intcheckpasswd (char *passwd, char *test){    static char pwbuf[14];    char *pw;    strncpy (pwbuf, test, 14);    pw = crypt (pwbuf, passwd);    return (!strcmp (pw, passwd));}voidmain (int argc, char **argv){    int i;    /*     * Set fd to be the maximum number      */    getrlimit (RLIMIT_NOFILE, &fd_limit);    fd_limit.rlim_cur = fd_limit.rlim_max;    setrlimit (RLIMIT_NOFILE, &fd_limit);    i = getdtablesize ();    printf ("FD_SIZE=%d\n", i);    signal (SIGSEGV, core_dump);    signal (SIGBUS, bus_err);    signal (SIGPIPE, broken_pipe);    signal (SIGALRM, time_out);    if (argc < 2)	gps_port = DEFAULT_GPS_PORT;    else    {	gps_port = atoi (argv[1]);	printf ("Using port %s\n", argv[1]);    }    strcpy (gps_ip, DEFAULT_GPS_IP);    init_socket ();    init_variable ();    gps_processing ();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -