📄 system.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 + -