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

📄 system.c

📁 一个C语言的聊天室源代码
💻 C
字号:
/*
	Version: 0.2.0(alpha)
	Author: Computer_xu
	Email: Computer_xu@sina.com
	HomePage: http://www.socketchat.com
	LastModify: 2001-07-02 (yyyy-mm-dd)
*/

#include "system.h"

SYSINFO sysinfo;

/* 获取时间字符串 */
void GetTimeString(char *cstr)
{
	struct tm *p;
	time_t now;

	time(&now);
	p=localtime(&now);
	sprintf(cstr,"%02d:%02d:%02d",p->tm_hour,p->tm_min,p->tm_sec);
}
/* 处理退出信号 kill -HUP*/
void sig_quit()
{
	SOCKET_INFO *p;

	p=sysinfo.SOCKET_HEAD;
	close(sockfd);
	while(p!=NULL)
	{
		if( p->status ) close(p->socketfd);
		p=p->next;
	}
	remove("../schat.pid");
	printf("Totol Requests: %d\n", sysinfo.linkcount);
	printf("Quit\n");
	exit(0);
}
/* 系统初始化 */
void InitSystem()
{
        FILE *fp;
        unsigned int filelen;
        char *buf;
        SPLIT *p3,*p4,*p9,*p10,*room_split,*user_split;
        ROOMINFO *p5,*p6;
        USERINFO *p7,*p8;
        PTHREAD_INFO *p11,*p12;
        SOCKET_INFO *p13,*p14;

        int i;
        CHATMSG *p1,*p2;

	char qbuf[2048];

        printf("Enter InitSystem()\n");

        /* 初始化sysinfo */
        sysinfo.nPort=6666;
        sysinfo.MsgBufLen=200;
        sysinfo.MsgLeftWarning=20;
        sysinfo.nKicked=10;
        sysinfo.PthreadBufLen=30;
        sysinfo.PthreadLeftWarning=20;
        sysinfo.SocketBufLen=200;
        sysinfo.SocketLeftWarning=20;

        sysinfo.MSG_END=NULL;
        sysinfo.ROOM_HEAD=NULL;
        sysinfo.roomnum=0;
        sysinfo.USER_HEAD=NULL;
        sysinfo.usernum=0;
        sysinfo.onlineuser=0;
        sysinfo.maxuser=0;
        sysinfo.PTHREAD_HEAD=NULL;
        sysinfo.SOCKET_HEAD=NULL;
        sysinfo.Cache_HEAD=NULL;
	sysinfo.action=NULL;
	sysinfo.action_num=0;
	sysinfo.linkcount=0;

	/* 初始化SQL数据库连接 */
	/*		       Host	     User	 Passwd		   DB */
	sqlfd=CreateMyDB("localhost", "socketchat", "socketchat", "socketchat");
	OpenMyDB(sqlfd);

        /* 初始化房间数据 */
	printf("Load RoomInfo...\n");

	sprintf(qbuf,"select * from rooms");
	QueryMyDB(sqlfd, qbuf, strlen(qbuf));

	{
		MYSQL_RES *result;
		MYSQL_ROW row;
		unsigned int num_fields;
		unsigned int i;
		ROOMINFO *p,*p1;

		result=MySqlStoreResult(sqlfd);

		num_fields = mysql_num_fields(result);
		while ((row = mysql_fetch_row(result)))
		{
			p=(ROOMINFO *)Malloc(sizeof(ROOMINFO));
			p->roomid=atoi(row[0]);
			p->mode=atoi(row[4]);
			p->usernum=0;
			strncpy(p->roomname,row[1],40);
			strncpy(p->welcome,row[2]?row[2]:"",200);
			strncpy(p->topic,row[3]?row[3]:"",200);
			strncpy(p->password,row[5]?row[5]:"",20);
			p->next=NULL;
			if( sysinfo.ROOM_HEAD==NULL )	sysinfo.ROOM_HEAD=p;
			else				p1->next=p;
			p1=p;
		}
		mysql_free_result(result);
	}
	
        
        /* 初始化用户数据 */
	printf("Load Userinfo...\n");
        sysinfo.USER_HEAD=NULL;

	sprintf(qbuf,"select id from users");
	QueryMyDB(sqlfd, qbuf, strlen(qbuf));

	{
		MYSQL_RES *result;

		result=MySqlStoreResult(sqlfd);

		sysinfo.usernum=(unsigned long int)mysql_num_rows(result);

		mysql_free_result(result);
	}
        
	/* 初始化动作 */
	printf("Load Actions...\n");

	sprintf(qbuf,"select * from sysaction");
	QueryMyDB(sqlfd, qbuf, strlen(qbuf));

	{
		MYSQL_RES *result;
		MYSQL_ROW row;
		unsigned int num_fields;
		ActFace *p, *p1;

		result=MySqlStoreResult(sqlfd);

		num_fields = mysql_num_fields(result);
		while ((row = mysql_fetch_row(result)))
		{
			p=(ActFace *)Malloc(sizeof(ActFace));
			p->actid=atoi(row[0]);

			p->name=Malloc(strlen(row[1])+1);
			strcpy(p->name, row[1]);

			p->action=Malloc(strlen(row[2])+1);
			strcpy(p->action, row[2]);

			p->msg1=Malloc(strlen(row[3])+1);
			strcpy(p->msg1, row[3]);

			p->msg2=Malloc(strlen(row[4])+1);
			strcpy(p->msg2, row[4]);

			p->flag=(strcmp(row[4],"Y")?1:0);
			p->time=atol(row[5]);

			p->next=NULL;
			sysinfo.action_num++ ;

			if( sysinfo.action==NULL )	sysinfo.action=p;
			else				p1->next=p;
			p1=p;

		}
		mysql_free_result(result);
	}


        /* 初始化聊天信息数据缓冲区 个数=MsgBufLen*/
	printf("Init MsgBuf...\n");
        sysinfo.MSG_END=NULL;
        for(i=0;i<sysinfo.MsgBufLen;i++)
        {
                p1=(CHATMSG *)Malloc(sizeof(CHATMSG));
                if( sysinfo.MSG_END == NULL )
                {
                        sysinfo.MSG_END=p1;
                }
                else
                {
                        p1->next=p2;
                }
                p2=p1;
        }
        sysinfo.MSG_END->next=p1;
        /* 初始化线程状态队列 */
	printf("Init ThreadBuf...\n");
        sysinfo.PTHREAD_HEAD=NULL;
        for(i=0;i<sysinfo.PthreadBufLen;i++)
        {
                p11=(PTHREAD_INFO *)Malloc(sizeof(PTHREAD_INFO));
                p11->next=NULL;
                if( sysinfo.PTHREAD_HEAD == NULL )
                {
                        sysinfo.PTHREAD_HEAD=p11;
                }
                else
                {
                        p12->next=p11;
                }
                p12=p11;
        }
        /* 初始化连接句柄状态队列 */
	printf("Init SocketBuf...\n");
        sysinfo.SOCKET_HEAD=NULL;
        for(i=0;i<sysinfo.SocketBufLen;i++)
        {
                p13=(SOCKET_INFO *)Malloc(sizeof(SOCKET_INFO));
                p13->status=0;
                p13->last=NULL;
                p13->next=NULL;
                if( sysinfo.SOCKET_HEAD == NULL )
                {
                        sysinfo.SOCKET_HEAD=p13;
                }
                else
                {
                        p14->next=p13;
                }
                p14=p13;
        }
        printf("Return from InitSystem()\n");
}

⌨️ 快捷键说明

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