SSCSM: Compress long messages
This commit is contained in:
parent
23844d8836
commit
22443daf2c
@ -307,17 +307,23 @@ core.register_on_receiving_chat_message(function(message)
|
||||
if not callbacks then return true end
|
||||
|
||||
-- Handle split messages
|
||||
local prefix = msg:sub(1, 1)
|
||||
if prefix == '\001' then
|
||||
local prefix = msg:byte(1)
|
||||
if prefix == 1 then
|
||||
msg = load_split_message(chan, msg)
|
||||
if not msg then
|
||||
return true
|
||||
end
|
||||
prefix = msg:sub(1, 1)
|
||||
prefix = msg:byte(1)
|
||||
end
|
||||
|
||||
-- Decompress messages
|
||||
if prefix == 3 then
|
||||
msg = minetest.decompress(minetest.decode_base64(msg:sub(2)))
|
||||
prefix = msg:byte(1)
|
||||
end
|
||||
|
||||
-- Load the message
|
||||
if prefix == '\002' then
|
||||
if prefix == 2 then
|
||||
msg = msg:sub(2)
|
||||
else
|
||||
msg = core.parse_json(msg)
|
||||
|
@ -20,6 +20,7 @@
|
||||
--
|
||||
|
||||
sscsm = {minify=true}
|
||||
local format = string.format
|
||||
local modpath = core.get_builtin_path() .. "game" .. DIR_DELIM ..
|
||||
"sscsm" .. DIR_DELIM
|
||||
|
||||
@ -218,8 +219,19 @@ function sscsm.com_send(pname, channel, msg)
|
||||
msg = assert(core.write_json(msg))
|
||||
end
|
||||
|
||||
-- Compress long messages
|
||||
if #msg > 4096 then
|
||||
-- Chat messages can't contain binary data so base64 is used
|
||||
local compressed_msg = minetest.encode_base64(minetest.compress(msg))
|
||||
|
||||
-- Only use the compressed message if it's shorter
|
||||
if #msg > #compressed_msg + 1 then
|
||||
msg = "\003" .. compressed_msg
|
||||
end
|
||||
end
|
||||
|
||||
-- Short messages can be sent all at once
|
||||
local prefix = "\001SSCSM_COM\001" .. channel .. "\001"
|
||||
local prefix = format("\001SSCSM_COM\001%s\001", channel)
|
||||
if #msg < 65300 then
|
||||
core.chat_send_player(pname, prefix .. msg)
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user