再写服务器_绝地武士版

module("GameAPI", package.seeall) -- "GameAPI"为用户定义的包名,包名需与其所在的文件名同名。 调用本文件里语法: packMap = require"GameAPI"



--获得当前服的ID
function GameAPI_get_cur_server_ID()
	return 1 --假设是1
end

--[[
--生成时间类(游戏将会有自已的时间器,这样可以提供更多随时间变化的特效,同时给玩家一种已在这里度过了很多时间的错觉)
--可以显时两个类(游戏时和当代时),并提供相应的转换公式
--游戏时间将全部以单项数字保存,只是在显示时才转换为日常格式
function GameAPI_create_timer( _game_time_start )
	local public = {}
	return public
end

--生成数据库处理器
function GameAPI_create_DB()
	local public = {}
	return public
end

--生成通讯处理器
function GameAPI_create_Talk()
	local public = {}
	return public
end

--生成组队处理器
function GameAPI_create_Team()
	local public = {}
	return public
end

--生成帮会处理器
function GameAPI_create_Party()
	local public = {}
	return public
end
--]]

--获得有效值
function get_valid_t( _t )
	local t = {}
	local len = table.getn(_t)
	for i=1, len do
		if nil ~= _t[i] then
			t[ table.getn(t) + 1] = _t[i]
		end
	end
	return t
end

--索引管理
function new_index_manager()
	local t_index = {}
	local public = {}
	--创建索引
	function public.create_index()
		for i=1, 9999999 do
			if nil == t_index[i] then
				t_index[i] = 1
				return i
			end
		end
		myPrint("索引资源用尽", 1)
		return nil
	end
	--索引是否有效
	function public.is_valid_index( _index )
		if nil ~= t_index[_index] then
			return true
		end
		return false
	end
	--删除索引
	function public.delete_index( _index )
		t_index[_index] = nil
	end
	return public
end

--1:N绑定器
function new_map_for_1_and_N()
	local left_set = {}
	local right_set = {}
	local public = {}
	--绑定索引和UID( 1:N )
	function public.bind_left_and_right( _left, _right )
		if nil == left_set[_left] then
			left_set[_left] = {}
		end
		local len = table.getn(left_set[_left])
		for i=1, len do
			if left_set[_left][i] == _right then
				return
			end
		end
		left_set[_left][table.getn(left_set[_left])+1] = _right
		right_set[_right] = _left
	end
	--清除绑定
	function public.clear_left_and_right( _left )
		local t_right = public.get_t_map_by_fb_buf_index( _left )
		local len = table.getn( t_right )
		for i=1, len do
			right_set[ t_right[i] ] = nil
		end
		left_set[_left] = nil
	end
	--清除绑定
	function public.clear_right( _left, _right )
		right_set[_right] = nil
		local t_right = left_set[_left]
		local len = table.getn( t_right )
		for i=1, len do
			if t_right[i] == _right then
				t_right[i] = nil
			end
		end
	end
	--通过left获得rigth表
	function public.get_t_right_by_left( _left )
		return get_valid_t( left_set[_left] )
	end
	--通过right获得left
	function public.get_left_by_right( _right )
		return right_set[ _right ]
	end
	return public
end

--buf绑定器
function new_map_for_index_to_buf( _binder_uid )
	local index_set = {}
	local public = {}
	--获得绑定者标识
	function public.get_uid()
		return _binder_uid
	end
	--绑定buf
	function public.bind_index_to_buf( _index, _buf )
		index_set[ _index ] = _buf
	end
	--清除绑定
	function public.clear_index_to_buf( _index )
		index_set[_index] = nil
	end
	--通过left获得rigth表
	function public.get_buf( _index )
		return index_set[ _index ]
	end
	return public
end

--常用绑定者
g_type_binder = new_map_for_index_to_buf( "type" )
function new_binder(_uid, _buf_type_binder, _buf_obj)
	--绑定操作类型
	g_type_binder.bind_index_to_buf(_uid, _buf_type_binder.get_uid() )
	--绑定操作对象
	_buf_type_binder.bind_index_to_buf(_uid, _buf_obj)
	return _uid
end
function find_t_buf_by_type( _container, _index, _buf_type )
	local t_right = _container.get_t_right_by_left( _index )
	local ret = {}
	local len = table.getn( t_right )
	for i=1, len do
		if g_type_binder.get_buf( t_right[i] ) == _buf_type then
			ret[ table.getn(ret) + 1] = t_right[i]
		end
	end
	return ret
end


 

module("EvtSvr", package.seeall)

--事件
function new_evt( _evt_iid, _evt_uid )
	local public = { evt_iid = _evt_iid, evt_uid = _evt_uid }
	return public
end

--查找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(_p_recv, _evt_iid)
			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(_p_recv, _evt_iid)
			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( _t_evt )
		--记录当前服,用于回复消息
		_t_evt.from_evt_svr = public

		--否决
		if nil ~= public.vote_map.map[ _t_evt.evt_iid ] then
			local t = public.vote_map.map[ _t_evt.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[ _t_evt.evt_iid ] then
			local t = public.action_map.map[ _t_evt.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[ _t_evt.evt_iid ] then
			local t = public.response_map.map[ _t_evt.evt_iid ]
			local len = table.getn( t )
			for i=1, len do
				t[i].on_response( _t_evt )
			end
		end
	end

	return public
end


 

module("Evt_Define", package.seeall)
pack_evt_svr = require"EvtSvr"
pack_GameAPI = require"GameAPI"


g_evt_index = pack_GameAPI.new_index_manager()
g_evt_buf = pack_GameAPI.new_map_for_index_to_buf( "evt" )
G_EVT_DEFINE =
{
	{iid = 1, uid = g_evt_index.create_index(), remark = "开启服务器消息"},
	{iid = 2, uid = g_evt_index.create_index(), remark = "初始化服务器消息"},
	{iid = 3, uid = g_evt_index.create_index(), remark = "反初始化服务器消息"},
	{iid = 4, uid = g_evt_index.create_index(), remark = "关闭服务器消息"},
	{iid = 5, uid = g_evt_index.create_index(), remark = "服务器心跳消息"},
}


--生成服务器消息机
function GameAPI_create_Svr_Evt()
	local public = {}
	public.evt_svr = pack_evt_svr.new_evt_server()
	function public.send_start_svr_evt()
		local evt = pack_evt_svr.new_evt(G_EVT_DEFINE[1].iid, G_EVT_DEFINE[1].uid)
		public.evt_svr.dispatch_evt(evt)
	end
	function public.send_init_svr_evt()
		local evt = pack_evt_svr.new_evt(G_EVT_DEFINE[2].iid, G_EVT_DEFINE[2].uid)
		public.evt_svr.dispatch_evt(evt)
	end
	function public.send_uninit_svr_evt()
		local evt = pack_evt_svr.new_evt(G_EVT_DEFINE[3].iid, G_EVT_DEFINE[3].uid)
		public.evt_svr.dispatch_evt(evt)
	end
	function public.send_close_svr_evt()
		local evt = pack_evt_svr.new_evt(G_EVT_DEFINE[4].iid, G_EVT_DEFINE[4].uid)
		public.evt_svr.dispatch_evt(evt)
	end
	return public
end
g_svr_evt_binder = pack_GameAPI.new_map_for_index_to_buf( "SVR_EVT" )


 

module("Space_Define", package.seeall)
pack_GameAPI = require"GameAPI"
pack_Evt_Define = require"Evt_Define"

g_Space_binder = pack_GameAPI.new_map_for_index_to_buf( "SPACE" )
--生成空间类
function GameAPI_create_space( _evt_svr, _name, _t_map_iid )
	local public = {}
	function public.get_name()
		return _name
	end
	function public.start( _evt )
		print("开启 " .. public.get_name() )
	end
	function public.init( _evt )
		print("初始化 " .. public.get_name() )
	end

	public.start_action = {}
	function public.start_action.on_action( _evt )
		public.start()
	end
	_evt_svr.action_map.add_listener(public.start_action, pack_Evt_Define.G_EVT_DEFINE[1].iid)

	public.init_action = {}
	function public.init_action.on_action( _evt )
		public.init( _evt )
	end
	_evt_svr.action_map.add_listener(public.init_action, pack_Evt_Define.G_EVT_DEFINE[2].iid)
	return public
end


 

module("Time_Define", package.seeall)
pack_GameAPI = require"GameAPI"
pack_Evt_Define = require"Evt_Define"

g_Time_binder = pack_GameAPI.new_map_for_index_to_buf( "TIME" )
--生成时间类
function GameAPI_create_Time( _evt_svr, _name )
	local public = {}
	function public.get_name()
		return _name
	end
	function public.start( _evt )
		print("开启 " .. public.get_name() )
	end
	function public.init( _evt )
		print("初始化 " .. public.get_name() )
	end

	public.start_action = {}
	function public.start_action.on_action( _evt )
		public.start()
	end
	_evt_svr.action_map.add_listener(public.start_action, pack_Evt_Define.G_EVT_DEFINE[1].iid)

	public.init_action = {}
	function public.init_action.on_action( _evt )
		public.init( _evt )
	end
	_evt_svr.action_map.add_listener(public.init_action, pack_Evt_Define.G_EVT_DEFINE[2].iid)
	return public
end


 

module("Configuration_Define", package.seeall)
pack_GameAPI = require"GameAPI"
pack_Evt_Define = require"Evt_Define"

g_Configuration_binder = pack_GameAPI.new_map_for_index_to_buf( "CONFIGURATION" )
--生成空间类
function GameAPI_create_Configuration( _evt_svr, _name )
	local public = {}
	function public.get_name()
		return _name
	end
	function public.start( _evt )
		print("开启 " .. public.get_name() )
	end
	function public.init( _evt )
		print("初始化 " .. public.get_name() )
	end

	public.start_action = {}
	function public.start_action.on_action( _evt )
		public.start()
	end
	_evt_svr.action_map.add_listener(public.start_action, pack_Evt_Define.G_EVT_DEFINE[1].iid)

	public.init_action = {}
	function public.init_action.on_action( _evt )
		public.init( _evt )
	end
	_evt_svr.action_map.add_listener(public.init_action, pack_Evt_Define.G_EVT_DEFINE[2].iid)
	return public
end


 

module("Configuration_Lua_1", package.seeall)
pack_Configuration_Define = require"Configuration_Define"





function GameAPI_create_Configuration_ex( _evt_svr, _name )
	local public = pack_Configuration_Define.GameAPI_create_Configuration( _evt_svr, _name )
	function public.start( _evt )
		print("开启 " .. public.get_name() )
	end
	function public.init( _evt )
		print("初始化 --> " .. public.get_name() )
		print("初始化 NPC" )
		print("初始化 活动配置" )
		print("结束初始化 -->")
	end

	return public
end


 

pack_GameAPI = require"GameAPI"
pack_Evt_Define = require"Evt_Define"
pack_Space_Define = require"Space_Define"
pack_time_Define = require"Time_Define"
pack_Configuration_Define = require"Configuration_Define"
pack_Configuration_Lua_1 = require"Configuration_Lua_1"


G_Evt_Server = pack_Evt_Define.GameAPI_create_Svr_Evt()
g_server_container = pack_GameAPI.new_map_for_1_and_N()
g_server_index_manager = pack_GameAPI.new_index_manager()



--生成当前服消息处理器
g_server_container.bind_left_and_right(
	pack_GameAPI.GameAPI_get_cur_server_ID(),
	pack_GameAPI.new_binder( g_server_index_manager.create_index(), pack_Evt_Define.g_svr_evt_binder,  G_Evt_Server)
	)

--生成当前服空间
g_server_container.bind_left_and_right(
	pack_GameAPI.GameAPI_get_cur_server_ID(),
	pack_GameAPI.new_binder( g_server_index_manager.create_index(), pack_Space_Define.g_Space_binder, pack_Space_Define.GameAPI_create_space(G_Evt_Server.evt_svr, "新手村空间--服务区", {1560,1561,1562}) )
	)

--生成当前服时间
g_server_container.bind_left_and_right(
	pack_GameAPI.GameAPI_get_cur_server_ID(),
	pack_GameAPI.new_binder( g_server_index_manager.create_index(), pack_time_Define.g_Time_binder, pack_time_Define.GameAPI_create_Time(G_Evt_Server.evt_svr, "新手村时间--游戏时") )
	)

--生成当前服配置
g_server_container.bind_left_and_right(
	pack_GameAPI.GameAPI_get_cur_server_ID(),
	pack_GameAPI.new_binder( g_server_index_manager.create_index(), pack_Configuration_Define.g_Configuration_binder, pack_Configuration_Lua_1.GameAPI_create_Configuration_ex(G_Evt_Server.evt_svr, "新手村配置--脚本1") )
	)

--开启服务器
function open_server()
	local t_obj = pack_GameAPI.find_t_buf_by_type(g_server_container, pack_GameAPI.GameAPI_get_cur_server_ID(), pack_Evt_Define.g_svr_evt_binder.get_uid() )
	local len = table.getn(t_obj)
	for i=1, len do
		local svr_evt = pack_Evt_Define.g_svr_evt_binder.get_buf( t_obj[i] )
		svr_evt.send_start_svr_evt()
	end
	for i=1, len do
		local svr_evt = pack_Evt_Define.g_svr_evt_binder.get_buf( t_obj[i] )
		svr_evt.send_init_svr_evt()
	end
end

--关闭服务器
function close_server()
	local t_obj = pack_GameAPI.find_t_buf_by_type(g_server_container, pack_GameAPI.GameAPI_get_cur_server_ID(), g_svr_evt_binder.get_uid() )
	local len = table.getn(t_obj)
	for i=1, len do
		local svr_evt = g_svr_evt_binder.get_buf( t_obj[i] )
		svr_evt.send_uninit_svr_evt()
	end
	for i=1, len do
		local svr_evt = g_svr_evt_binder.get_buf( t_obj[i] )
		svr_evt.send_close_svr_evt()
	end
end

open_server()


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值