[建議] 關於水桶上限改進法
以下方針,希望看得懂程式的板友看看後,給予技術上的建議
或是其餘板友亦可給功能上的建議
弄好後我就會對站方提出程式修改建議了
感謝大家提供建議
====================
簡單來說水桶上限是定義在這張Table中
friend.c
static const unsigned int friend_max[8] = {
MAX_FRIEND, /* FRIEND_OVERRIDE */
MAX_REJECT, /* FRIEND_REJECT */
MAX_LOGIN_INFO, /* FRIEND_ALOHA */
MAX_POST_INFO, /* FRIEND_POST */
MAX_NAMELIST, /* FRIEND_SPECIAL */
MAX_FRIEND, /* FRIEND_CANVOTE */
MAX_FRIEND, /* BOARD_WATER */
MAX_FRIEND, /* BOARD_VISABLE */
};
當要存取時候,定義在
friend.c
friend_append()
{
...
while (fgets(buf, sizeof(buf), fp) && (unsigned)count <= friend_max[type])
{
...
}
...
}
這中間都無法特別針對八卦板的Case去做存取,當要判斷使用者是否水桶
是利用這段:
cache.c:
const char *postperm_msg(const char *bname)
{
.
.
.
if (file_exist_record(buf, cuser.userid))
return "使用者水桶中";
.
.
.
}
發文限制判斷是在board.c
int b_config(void)
{
.
.
if (!cachePostPerm)
{
const char *msg = postperm_msg(bp->brdname);
if (msg) // some reasons
{
...
}
}
.
.
}
要提高八卦板水桶上限,加高MAX_FRIEND顯然不可行
因為實在太多變數是使用MAX_FRIEND 包刮使用者的好友名單上限
因此這裡可能可以用的改善方法:
1.直接修改 static const unsigned int friend_max {}
這張Table,
將這個欄位:
MAX_FRIEND, /* BOARD_WATER */
改成其他數值
這樣全站所有板的水桶名單上限都會提高
這樣儲存水桶名單那個file容量不會大幅提升
敝人是認為可行
為什麼呢?因為他存名單是採用
friend_add(const char *uident, int type, const char* des)
{
if (friend_count(fpath) > friend_max[type])
return;
}
簡單來說是存名單前,檢查一下檔案的lines數量
因此不會特別造成容量大為增加
2.針對八卦板Case,去做改變
我們可以寫入在board.c
int b_config(void)
{
}
加一段:
if(strcmp(bp->brdname,"Gossiping")==0)
{
}
不過這樣一來可能就要新寫一段
const char *GOSSIP_postperm_msg(const char *bname)
{
...
}
然後去讀不同的檔案
另外個先解救方法是,讀取看板好友名單,因為那邊也會佔256個欄位
然後同樣設定為水桶。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.66.37.44
推
03/29 02:16, , 1F
03/29 02:16, 1F