[M3] 修正 正在回熱訊的網友收不到聊天呼叫
以前在 ^R 回信息時,如果有人來串門(呼你聊天或打小雞)
您收不到它的信號,而他還在可憐的等您回答呢!
2003/01/02: 修正 正在回熱訊的網友收不到聊天呼叫
>-----------------src/maple/talk.c-----------------<
1. 修改 talk_page() 函數
... ...
close(msgsock);
+ /* hightman.030102: 解決回復熱訊時不能talk的問題, 結束記得放sockport */
+ cutmp->sockport = 0;
... ...
2. 修改 talk_rqst() 函數
... ...
+ /* hightman.030102: 解決回復熱訊時不能talk的問題, 開始就記入sockport */
+ cutmp->sockport = port;
sock = socket(AF_INET, SOCK_STREAM, 0);
...
...
close(sock);
+ /* hightman.030102: 解決回復熱訊時不能talk的問題, 結束記得放sockport */
+ cutmp->sockport = 0;
+ cutmp->talker = NULL; /* 為何不順便放掉這個呢 */
... ...
>----------------src/maple/visio.c--------------<
1. 修改 igetch() 函數
... ...
#define IM_TALK 0x04
+ /* hightman.030102: 解決回復熱訊時不能talk的問題 */
+ #define REPLY_TALK 0x08 /* ^R + talk_rqst */
... ...
data = vi_pool;
nfds = 0;
+ /* hightman.030102: 解決回復熱訊時不能talk的問題 */
+ if (cutmp != NULL && (cutmp->sockport > 0) && !(imode & IM_TALK))
+ // 剛開始talk
+ {
+ imode |= IM_TALK;
+ if (imode & IM_REPLY)
+ {
+ imode ^= IM_REPLY; // 否則看不到 vio_fd 就慘了
+ imode |= REPLY_TALK; // 結束 talk 時需要還原 IM_REPLY
+ }
+ }
+ else if (cutmp != NULL && (cutmp->sockport <= 0) && (imode & IM_TALK))
+ // talk 剛結束
+ {
+ imode ^= IM_TALK;
+ if (imode & REPLY_TALK)
+ {
+ imode ^= REPLY_TALK;
+ imode |= IM_REPLY; // 繼續 reply 吧
+ }
+ }
+ /* hightman.030102: end */
... ...
/*
* Thor.980307: 想不到什麼好方法, 在^R時禁止talk, 否則會因 ,
* 沒有vio_fd, 看不到 I_OTHERDATA 所以在 ctrl-r時talk, 看不到對方打
*/
+ /* hightman.030102: 已經解決此問題 */
+ #if 0
signal(SIGUSR1, SIG_IGN);
+ #endif
imode |= IM_REPLY;
bmw_reply();
imode ^= IM_REPLY;
/*
* Thor.980307: 想不到什麼好方法, 在^R時禁止talk, 否則會因 ,
* 沒有vio_fd, 看不到 I_OTHERDATA 所以在 ctrl-r時talk, 看不到對方打
*/
+ /* hightman.030102: 已經解決此問題 */
+ #if 0
signal(SIGUSR1, (void *) talk_rqst);
+ #endif
... ...
--
※ 來源:.溫馨小屋 bbs.feeling.smth.org.[FROM: lib.zju.edu.cn]
Maple 近期熱門文章
PTT數位生活區 即時熱門文章