荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hace.bbs@hace.dhs.org (半边海), 信区: InstallBBS
标  题: 多行讯息
发信站: BBS_半边海站 (Mon Nov 24 00:56:47 2003)
转信站: SZU!news.ccie.net.cn!hace

* 多行讯息 *

本文可能只对 fb2k 系列有效.

fb2k 的讯息部分主要在文件 sendmsg.c 中的, 具体实现大概是
,把讯息写到某文件中,这个文件是 home/?/id/msgfile
然后向要发送的用户传送信号 SIGUSR2 ,(函数do_sendmsg())
 一旦有信号 SIGUSR2 ,就会触发函数 r_msg() ,
另外的 r_msg2() 用来查看历史讯息的, 就是按 Ctrl+Z 啦.

可以到 http://goon.wox.org 下载代码来参考.下面说的只是改动的地方:

1. bbs.h 增加下面两行
#define MAX_MSG_SIZE 1024
#define MSGDIR ".msgdir"

2. struct.h 增加
struct msgdir {
    char userid[IDLEN + 2];
    time_t tt;
    pid_t pid;
    char msg[MAX_MSG_SIZE];
};
用来暂时保存信息的,就是文件 home/?/userid/.msgdir 的结构
这个文件在用户每次登录后就会删掉, 代码是 main.c 中的 user_login() 里的
    {
        int tuid=0;
        struct user_info uin;
        extern int t_cmpuids(int , struct user_info);
        tuid = getuser(currentuser.userid);
        if(t_search_ulist(&uin, t_cmpuids, tuid, NA, NA) < 2){
            setuserfile(fname,MSGDIR);
            unlink(fname);
        }
    }
其实这个文件也可以不用删除的, 如果你想保留的话, :)

3. io.c 中增加
  函数 int multi_getdata() ,这个函数是从 smthbbs 的代码中获取的,略加了些修改.
  注意,还要在些函数前加上

#define LINELEN 132
int ingetdata = 0;
int UPDOWN = 0;
extern int scr_cols, scr_lns;

    函数 multi_getdata() 只用在三个地方:
    sendmsg.c 中的 get_msg() , r_msg() , r_msg2()

另外, 函数 multi_getdata() 会用到 saveline2() (在 screen.c 中)
注: saveline2() 是把? smthbbs 中 saveline() 改名而得的.

3. sendmsg.c
    新增两个函数:
    append_msg() 写讯息到 home/?/userid/.msgdir
    这个函数用在 do_sendmsg()  中.
    count_msgline() 计算某字符有多少个'\n'
    该函数用在 r_msg() 和 r_msg2() 中

    主要修改的有 r_msg() 和 r_msg2() , 这两个函数最好仔细的看.
    注意,当中的 saveline() 已经被修改的了,见 screen.c .
--
※ 来源:·BBS 半边海站 bbs.ccie.net.cn·[FROM: 深海]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店