csvdatad.lua 1.71 KB
local sharedata = require "skynet.sharedata"
local skynet = require "skynet"
local lfs = require "lfs"
local redisproxy = require "shared.redisproxy"
require "shared.init"
require "utils.init"
require "csvdata.init"
require "skynet.manager"
require "RedisKeys"

-- local csvdb = {}

local function formatFileName(filename)
	filename = string.trim(filename)
	local basename = filename:match("([^/]+)%.lua$")
	if not basename then return end
	local loadname = filename:match("^src/([^.]+)%.lua$")
	loadname = loadname:gsub('/', '.')
	return basename, loadname
end

local function travCsv(rootPath, pathes)
	pathes = pathes or {}
	local modified = false
	local ok, files, iter = pcall(lfs.dir, rootPath)
	if not ok then return modified end
	for entry in files, iter do
		-- 过滤 . 开始的字符串包括 . .. .git .开头的文件名
		if string.byte(entry, 1) ~= 46 then
			local pathfile = rootPath .. '/' .. entry
			local attrs = lfs.attributes(pathfile)
			if attrs.mode == 'directory' then
				modified = travCsv(pathfile, pathes) or modified
			else
				local basename, loadname = formatFileName(pathfile)
				if basename then
					if tonum(pathes[loadname]) < attrs.modification then
						modified = true
						pathes[loadname] = attrs.modification
					end
					if basename == "init" or basename == "init_adv" then
						require(loadname)
					end
				end
			end
		end
	end
	return modified
end

-- 每分钟检查是否有更改
local file2timeMap = {}
local function handle_timeout()
	if travCsv("src/csvdata", file2timeMap) then
		sharedata.update("csvdata", csvdb)
	end
	skynet.timeout(100*5, handle_timeout)
end

skynet.start(function ()
	travCsv("src/csvdata", file2timeMap)
	sharedata.new("csvdata", csvdb)
	-- handle_timeout()
end)