再写服务器_绝地武士版

来源:互联网 发布:centos7安装yum 编辑:程序博客网 时间:2024/04/28 12:10
module("GameAPI", package.seeall) -- "GameAPI"为用户定义的包名,包名需与其所在的文件名同名。 调用本文件里语法: packMap = require"GameAPI"--获得当前服的IDfunction GameAPI_get_cur_server_ID()return 1 --假设是1end--[[--生成时间类(游戏将会有自已的时间器,这样可以提供更多随时间变化的特效,同时给玩家一种已在这里度过了很多时间的错觉)--可以显时两个类(游戏时和当代时),并提供相应的转换公式--游戏时间将全部以单项数字保存,只是在显示时才转换为日常格式function GameAPI_create_timer( _game_time_start )local public = {}return publicend--生成数据库处理器function GameAPI_create_DB()local public = {}return publicend--生成通讯处理器function GameAPI_create_Talk()local public = {}return publicend--生成组队处理器function GameAPI_create_Team()local public = {}return publicend--生成帮会处理器function GameAPI_create_Party()local public = {}return publicend--]]--获得有效值function get_valid_t( _t )local t = {}local len = table.getn(_t)for i=1, len doif nil ~= _t[i] thent[ table.getn(t) + 1] = _t[i]endendreturn tend--索引管理function new_index_manager()local t_index = {}local public = {}--创建索引function public.create_index()for i=1, 9999999 doif nil == t_index[i] thent_index[i] = 1return iendendmyPrint("索引资源用尽", 1)return nilend--索引是否有效function public.is_valid_index( _index )if nil ~= t_index[_index] thenreturn trueendreturn falseend--删除索引function public.delete_index( _index )t_index[_index] = nilendreturn publicend--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] thenleft_set[_left] = {}endlocal len = table.getn(left_set[_left])for i=1, len doif left_set[_left][i] == _right thenreturnendendleft_set[_left][table.getn(left_set[_left])+1] = _rightright_set[_right] = _leftend--清除绑定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 doright_set[ t_right[i] ] = nilendleft_set[_left] = nilend--清除绑定function public.clear_right( _left, _right )right_set[_right] = nillocal t_right = left_set[_left]local len = table.getn( t_right )for i=1, len doif t_right[i] == _right thent_right[i] = nilendendend--通过left获得rigth表function public.get_t_right_by_left( _left )return get_valid_t( left_set[_left] )end--通过right获得leftfunction public.get_left_by_right( _right )return right_set[ _right ]endreturn publicend--buf绑定器function new_map_for_index_to_buf( _binder_uid )local index_set = {}local public = {}--获得绑定者标识function public.get_uid()return _binder_uidend--绑定buffunction public.bind_index_to_buf( _index, _buf )index_set[ _index ] = _bufend--清除绑定function public.clear_index_to_buf( _index )index_set[_index] = nilend--通过left获得rigth表function public.get_buf( _index )return index_set[ _index ]endreturn publicend--常用绑定者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 _uidendfunction 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 doif g_type_binder.get_buf( t_right[i] ) == _buf_type thenret[ table.getn(ret) + 1] = t_right[i]endendreturn retend


 

module("EvtSvr", package.seeall)--事件function new_evt( _evt_iid, _evt_uid )local public = { evt_iid = _evt_iid, evt_uid = _evt_uid }return publicend--查找obj位置function find_obj_pos(_t, _p)local len = table.getn( _t )for i=1, len doif _t[i] == _p thenreturn iendendreturn nilend--否决事件监听function new_vote_evt_listener()local public = {}function public.on_vote( _t_evt )myPrint("未实现 new_vote_evt_listener", 1)return falseendreturn publicend--执行消息监听function new_action_evt_listener()local public = {}function public.on_action( _t_evt )myPrint("未实现 new_action_evt_listener", 1)endreturn publicend--完毕消息监听function new_response_evt_listener()local public = {}function public.on_response( _t_evt )myPrint("未实现 new_response_evt_listener", 1)endreturn publicend--消息处理机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] thenthis_public.map[_evt_iid] = {}endlocal t = this_public.map[_evt_iid]if nil == find_obj_pos(t, _p_recv) thent[ table.getn(t) + 1 ] = _p_recvendendfunction this_public.remove_listener(_p_recv, _evt_iid)if nil ~= this_public.map[_evt_iid] thenlocal t = this_public.map[_evt_iid]local id = find_obj_pos(t, _p_recv)if nil ~= id thenlocal len = table.getn(t)t[id] = t[len]t[len] = nilendif table.getn(t) <= 0 thenthis_public.map[_evt_iid] = nilendendendfunction this_public.clear()this_public.map = {}endreturn this_publicendlocal 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()endfunction public.dispatch_evt( _t_evt )--记录当前服,用于回复消息_t_evt.from_evt_svr = public--否决if nil ~= public.vote_map.map[ _t_evt.evt_iid ] thenlocal t = public.vote_map.map[ _t_evt.evt_iid ]local len = table.getn( t )for i=1, len doif t[i].on_vote( _t_evt ) thenreturnendendend--触发if nil ~= public.action_map.map[ _t_evt.evt_iid ] thenlocal t = public.action_map.map[ _t_evt.evt_iid ]local len = table.getn( t )for i=1, len dot[i].on_action( _t_evt )endend--完毕if nil ~= public.response_map.map[ _t_evt.evt_iid ] thenlocal t = public.response_map.map[ _t_evt.evt_iid ]local len = table.getn( t )for i=1, len dot[i].on_response( _t_evt )endendendreturn publicend


 

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)endfunction 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)endfunction 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)endfunction 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)endreturn publicendg_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 _nameendfunction public.start( _evt )print("开启 " .. public.get_name() )endfunction public.init( _evt )print("初始化 " .. public.get_name() )endpublic.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 publicend


 

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 _nameendfunction public.start( _evt )print("开启 " .. public.get_name() )endfunction public.init( _evt )print("初始化 " .. public.get_name() )endpublic.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 publicend


 

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 _nameendfunction public.start( _evt )print("开启 " .. public.get_name() )endfunction public.init( _evt )print("初始化 " .. public.get_name() )endpublic.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 publicend


 

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() )endfunction public.init( _evt )print("初始化 --> " .. public.get_name() )print("初始化 NPC" )print("初始化 活动配置" )print("结束初始化 -->")endreturn publicend


 

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 dolocal svr_evt = pack_Evt_Define.g_svr_evt_binder.get_buf( t_obj[i] )svr_evt.send_start_svr_evt()endfor i=1, len dolocal svr_evt = pack_Evt_Define.g_svr_evt_binder.get_buf( t_obj[i] )svr_evt.send_init_svr_evt()endend--关闭服务器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 dolocal svr_evt = g_svr_evt_binder.get_buf( t_obj[i] )svr_evt.send_uninit_svr_evt()endfor i=1, len dolocal svr_evt = g_svr_evt_binder.get_buf( t_obj[i] )svr_evt.send_close_svr_evt()endendopen_server()