aboutsummaryrefslogtreecommitdiff
path: root/advtrains/advtrains/debugringbuffer.lua
blob: 1be9da9e68461d3eb3d6a8a7d08ea8fe652b253e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
--so, some ringbuffers one for each train

local ringbuflen=1000

local ringbufs={}
local ringbufcnt={}

function advtrains.drb_record(tid, msg)
	if not ringbufs[tid] then
		ringbufs[tid]={}
		ringbufcnt[tid]=0
	end
	ringbufs[tid][ringbufcnt[tid]]=msg
	ringbufcnt[tid]=ringbufcnt[tid]+1
	if ringbufcnt[tid] > ringbuflen then
		ringbufcnt[tid]=0
	end
end
function advtrains.drb_dump(tid)
	atlog("Debug ring buffer output for '"..tid.."':")
	local stopcnt=ringbufcnt[tid]
	if not stopcnt then
		atlog("ID unknown!")
		return
	end
	repeat
		atlog(ringbufs[tid][ringbufcnt[tid]])
		ringbufcnt[tid]=ringbufcnt[tid]+1
		if ringbufcnt[tid] > ringbuflen then
			ringbufcnt[tid]=0
		end
	until ringbufcnt[tid]==stopcnt
end

minetest.register_chatcommand("atdebug_show",
	{
        params = "train sid", -- Short parameter description
        description = "Dump debug log", -- Full description
        privs = {train_operator=true}, -- Require the "privs" privilege to run
        func = function(name, param)
			advtrains.drb_dump(param)
        end, -- Called when command is run.
                                      -- Returns boolean success and text output.
    })