我正在寫一個IRCd。對於這個話題,如果你對IRC有很多瞭解,這並不重要。它是一個簡單的代碼風格問題。好的方式來打破回覆成碎片在紅寶石
問題的快速概覽:
- 沒有消息可以是超過512個字符
- 如果該消息是多,它必須被破碎成碎片
- 名稱回覆再發出的所有的暱稱頻道上的用戶,並且快速增長超過512個字符。
我目前炮製了這段奇妙的代碼,它完美的工作。然而,它只是不「紅寶石般的」。這段代碼更適合您在某些C代碼中所期望的內容。
# 11 is the number of all fixed characters combined in the reply
pre_length = 11 + servername.length + mynick.length + channel.name.length
list = [""]
i = 0
channel.nicks.each do |nick, client|
list[i+=1] = "" if list[i].length + nick.length + pre_length > 500
list[i] << "#{channel.mode_char(client)}#{client.nick} "
end
list.each { |l| send_numeric(RPL_NAMREPLY, channel.name, l.strip) }
send_numeric(RPL_ENDOFNAMES, channel.name)
所以我的問題是,任何想法做得更好?
PS。代碼已被略微修改,以便更容易理解的上下文
我自己稍微修改了流程,但確切地說我在找什麼。 – user163365