调试器

--[[
 file name : 	技能模块第一版
 author  :  	Clark/陈泽丹
 created :  	2012-11-07
 purpose :
 --]]


module("工具库_事件机", package.seeall)


--查找obj位置
function find_obj_pos(_t, _p)
	local len = table.getn( _t )
	for i=1, len do
		if _t[i] == _p then
			return i
		end
	end
	return nil
end

--否决事件监听
function new_vote_evt_listener()
	local public = {}
	function public.on_vote( _t_evt )
		myPrint("未实现 new_vote_evt_listener", 1)
		return false
	end
	return public
end

--执行消息监听
function new_action_evt_listener()
	local public = {}
	function public.on_action( _t_evt )
		myPrint("未实现 new_action_evt_listener", 1)
	end
	return public
end

--完毕消息监听
function new_response_evt_listener()
	local public = {}
	function public.on_response( _t_evt )
		myPrint("未实现 new_response_evt_listener", 1)
	end
	return public
end

--消息处理机
function new_evt_server()
	local function new_event_map()
		local this_public = {}
		this_public.map = {}
		function this_public.add_listener(_evt_iid, _p_recv)
			if nil == this_public.map[_evt_iid] then
				this_public.map[_evt_iid] = {}
			end
			local t = this_public.map[_evt_iid]
			if nil == find_obj_pos(t, _p_recv) then
				t[ table.getn(t) + 1 ] = _p_recv
			end
		end
		function this_public.remove_listener(_evt_iid, _p_recv)
			if nil ~= this_public.map[_evt_iid] then
				local t = this_public.map[_evt_iid]
				local id = find_obj_pos(t, _p_recv)
				if nil ~= id then
					local len = table.getn(t)
					t[id] = t[len]
					t[len] = nil
				end
				if table.getn(t) <= 0 then
					this_public.map[_evt_iid] = nil
				end
			end
		end
		function this_public.clear()
			this_public.map = {}
		end
		return this_public
	end
	local public = {}
	public.vote_map = new_event_map()
	public.action_map = new_event_map()
	public.response_map = new_event_map()
	function public.clear()
		public.vote_map.clear()
		public.action_map.clear()
		public.response_map.clear()
	end
	function public.dispatch_evt( _evt_iid, _t_evt )
		--记录当前服,用于回复消息
		_t_evt.from_evt_svr = public

		--否决
		if nil ~= public.vote_map.map[ _evt_iid ] then
			local t = public.vote_map.map[ _evt_iid ]
			local len = table.getn( t )
			for i=1, len do
				if t[i].on_vote( _t_evt ) then
					return
				end
			end
		end

		--触发
		if nil ~= public.action_map.map[ _evt_iid ] then
			local t = public.action_map.map[ _evt_iid ]
			local len = table.getn( t )
			for i=1, len do
				t[i].on_action( _t_evt )
			end
		end

		--完毕
		if nil ~= public.response_map.map[ _evt_iid ] then
			local t = public.response_map.map[ _evt_iid ]
			local len = table.getn( t )
			for i=1, len do
				t[i].on_response( _t_evt )
			end
		end
	end

	return public
end


 

--[[
 file name : 	技能模块第一版
 author  :  	Clark/陈泽丹
 created :  	2012-11-07
 purpose :
 --]]

module("工具库_调试工具", package.seeall)
PACK_EvtSvr 			= require"工具库_事件机"


--技能服
G_trace_svr = PACK_EvtSvr.new_evt_server()

--输出
function do_print_on_trace_svr()
	local public = PACK_EvtSvr.new_action_evt_listener()
	function public.on_action( _evt )
		print( _evt.evt_iid, _evt.text )
	end
	return public
end
trace_obj = do_print_on_trace_svr()



--打开输出开关
function open_trace( _evt_iid )
	G_trace_svr.action_map.add_listener( _evt_iid, trace_obj )
end

--关闭输出开关
function close_trace( _evt_iid )
	G_trace_svr.action_map.remove_listener( _evt_iid, trace_obj )
end

--输出调试语句
function trace_text( _evt_iid, _text )
	G_trace_svr.dispatch_evt( _evt_iid, { evt_iid = _evt_iid, text = _text} )
end

--[[
open_trace( "fefd" )
trace_text( "fefd", "ttte4es")
close_trace( "fefd" )
trace_text( "fefd", "ttte4es")
--]]


 

你可能感兴趣的:(调试器)