--用于唯一标识obj的table _inner_event_connection_obj = _inner_event_connection_obj or {} Event = Event or BaseClass() local Event = Event local getmetatable = getmetatable local setmetatable = setmetatable function Event:__init(event_id, parent) self.parent = parent self.event_id = event_id self.bind_id_count = 0 self.bind_count = 0 self.event_func_list = {} end function Event:__defineVar() return { _class_type = self, --_cid = self._id, _iid = _in_obj_ins_id, _use_delete_method = false, parent = nil,--parent event_id = nil,--event_id bind_id_count = 0,--0 bind_count = 0,--0 event_func_list = {}--{} } end function Event:GetEventID() return self.event_id end function Event:Fire(arg_table) --[[ local arg_count = table.maxn(arg_table) or 0 local myunpack myunpack = function (t, i) if i <= arg_count then return t[i], myunpack(t, i + 1) end end ]] for _, func in pairs(self.event_func_list) do func( unpack( arg_table ) ) end end function Event:UnBind(obj) --仅当obj符合类型时才作对应操作 if getmetatable(obj) == _inner_event_connection_obj and obj.event_id == self.event_id then self.event_func_list[obj.bind_id] = nil self.bind_count = self.bind_count - 1 end end function Event:Bind(event_func) local obj = {} setmetatable(obj, _inner_event_connection_obj) self.bind_count = self.bind_count + 1 if self.bind_count > 5000 then obj.event_id = self.event_id obj.bind_id = 0 self.parent:CallError(self.event_id) return obj end self.bind_id_count = self.bind_id_count + 1 obj.event_id = self.event_id obj.bind_id = self.bind_id_count self.event_func_list[obj.bind_id] = event_func return obj end