From 68c26240b7471c1f580cb49b84da192bdc773a68 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Mon, 27 Apr 2020 16:48:47 -0400 Subject: [PATCH] Removed observer pattern witht he intent of replacing it with wisper. --- lib/aethyr/core/cache_gary.rb | 4 +- lib/aethyr/core/commands/admin/aforce.rb | 15 ++-- lib/aethyr/core/components/manager.rb | 79 +--------------------- lib/aethyr/core/components/storage.rb | 2 +- lib/aethyr/core/objects/game_object.rb | 20 ------ lib/aethyr/core/objects/traits/expires.rb | 2 +- lib/aethyr/core/objects/traits/location.rb | 11 ++- lib/aethyr/core/objects/traits/reacts.rb | 9 ++- lib/aethyr/core/objects/traits/respawns.rb | 3 +- 9 files changed, 23 insertions(+), 122 deletions(-) diff --git a/lib/aethyr/core/cache_gary.rb b/lib/aethyr/core/cache_gary.rb index 9283202..2cf41d3 100644 --- a/lib/aethyr/core/cache_gary.rb +++ b/lib/aethyr/core/cache_gary.rb @@ -67,7 +67,6 @@ class CacheGary < Gary log "Loading #{goid} from storage" , Logger::Ultimate begin obj = @storage.load_object(goid, self) - obj.add_observer(@manager) rescue MUDError::NoSuchGOID log "Tried to load #{goid}, but it must have been deleted." return nil @@ -78,12 +77,11 @@ class CacheGary < Gary end end - #Add object to CacheGary, also adds the Manager as an observer. + #Add object to CacheGary. def << game_object @mutex.synchronize do @ghash[game_object.goid] = game_object @all_goids << game_object.goid - game_object.add_observer(@manager) end end diff --git a/lib/aethyr/core/commands/admin/aforce.rb b/lib/aethyr/core/commands/admin/aforce.rb index 07f1e40..318060f 100644 --- a/lib/aethyr/core/commands/admin/aforce.rb +++ b/lib/aethyr/core/commands/admin/aforce.rb @@ -15,7 +15,7 @@ module Aethyr syntax_formats = ["AFORCE [OBJECT] [ACTION]"] aliases = nil content = <<'EOF' -Sorry no help has been written for this command yet +Forces another player to execute a command. EOF help_entries.push(Aethyr::Core::Help::HelpEntry.new(command, content: content, syntax_formats: syntax_formats, see_also: see_also, aliases: aliases)) @@ -50,17 +50,12 @@ EOF if object.nil? player.output "Force who?" return - elsif object.is_a? Mobile - unless object.info.redirect_output_to == player.goid - object.info.redirect_output_to = player.goid - - after 10 do - object.info.redirect_output_to = nil - end - end + elsif object.is_a? Player + object.handle_input(event[:command]) + else + player.output "You can only force other players to execute a command." end - player.add_event(CommandParser.parse(object, event[:command])) end end diff --git a/lib/aethyr/core/components/manager.rb b/lib/aethyr/core/components/manager.rb index b83fc15..469af6f 100644 --- a/lib/aethyr/core/components/manager.rb +++ b/lib/aethyr/core/components/manager.rb @@ -7,7 +7,7 @@ require 'aethyr/core/registry' require 'aethyr/core/util/publisher' require 'set' -#The Manager class uses the observer model to recieve commands from objects, which +#The Manager class uses the wisper to recieve commands from objects, which #it then passes along to the EventHandler. #The Manager also keeps track of all game objects and takes care of adding, removing, and #finding them. @@ -184,7 +184,7 @@ class Manager < Publisher def add_object(game_object, position = nil) @game_objects << game_object unless @game_objects.loaded? game_object.goid - + broadcast(:object_added, { :publisher => self, :game_object => game_object, :position => position}) unless game_object.room.nil? @@ -348,81 +348,6 @@ class Manager < Publisher log "Error when dropping player, but recovering and continuing." end - #Update gets called when an event occurs. The event is just passed along to the EventHandler, unless it is a :quit or :save - #event, in which case the Manager takes care of it. - def update(event) - return if not @running - log "Got event: #{event}", Logger::Medium - if event.nil? - return - elsif event[:type] == :Future - future_event(event) - return - end - - log "Adding event to event handler from #{event[:player]}", Logger::Ultimate - @event_handler.event_queue << event - - #EventMachine.defer lambda {@event_handler.run} - @event_handler.run - end - - #Add a future event. - def future_event(event) - if event[:action] == :call - EventMachine.add_timer(event[:time]) do - if $manager.cancelled? event - $manager.remove_cancelled event - break - end - - e = event[:event].call - - if e.is_a? String - e = CommandParser.parse(event[:player], e) - end - - if e.is_a? Event - $manager.update(e) - end - - end - else - EventMachine.add_timer(event[:time]) do - if $manager.cancelled? event - $manager.remove_cancelled event - break - end - - $manager.update(event[:event]) - end - end - end - - def cancel_event event - if event.is_a? Integer - @cancelled_events << event - else - @cancelled_events << event.object_id - end - end - - def cancelled? event - if event.is_a? Integer - @cancelled_events.include? event - else - @cancelled_events.include? event.object_id - end - end - - def remove_cancelled event - if event.is_a? Integer - @cancelled_event.delete event - else - @cancelled_event.delete event.object_id - end - end - #Calls update on all objects. def update_all #require 'benchmark' diff --git a/lib/aethyr/core/components/storage.rb b/lib/aethyr/core/components/storage.rb index f249225..362b211 100644 --- a/lib/aethyr/core/components/storage.rb +++ b/lib/aethyr/core/components/storage.rb @@ -182,7 +182,7 @@ class StorageMachine #Recursively stores object and its inventory. # - #Warning: this temporarily removes the object's observers. + #Warning: this temporarily removes the object's subscribers. def store_object(object) volatile_data = object.dehydrate() diff --git a/lib/aethyr/core/objects/game_object.rb b/lib/aethyr/core/objects/game_object.rb index f238ed9..b2fafb9 100644 --- a/lib/aethyr/core/objects/game_object.rb +++ b/lib/aethyr/core/objects/game_object.rb @@ -1,4 +1,3 @@ -require 'observer' require 'aethyr/core/util/publisher' require 'aethyr/core/util/log' require 'aethyr/core/objects/inventory' @@ -9,7 +8,6 @@ require 'aethyr/core/event' #Base class for all game objects, including players. Should be subclassed to do anything useful. class GameObject < Publisher - include Observable include Pronoun attr_reader :short_desc, :game_object_id, :alt_names, :generic, :article, :sex, :show_in_look, :actions, :balance, :admin, :manager @@ -18,7 +16,6 @@ class GameObject < Publisher alias :room :container alias :can? :respond_to? alias :goid :game_object_id - volatile :@observer_peers #Creates a new GameObject. Most of this long list of parameters is simply ignored at creation time, #because they can all be set later. @@ -73,17 +70,6 @@ class GameObject < Publisher @admin = false end - def rehydrate(volatile_data) - super(volatile_data) - if volatile_data.nil? - if RUBY_VERSION < "1.9.0" - self.instance_variable_set(:@observer_peers, []) - else - self.instance_variable_set(:@observer_peers, {}) - end - end - end - def flags Hash.new @info.flags end @@ -145,12 +131,6 @@ class GameObject < Publisher def run end - #Just a way to put an event into the system, nothing more, nothing less. - def add_event(event) - changed - notify_observers(event) - end - #Basically, this is where hooks for commands would go. def alert(event) end diff --git a/lib/aethyr/core/objects/traits/expires.rb b/lib/aethyr/core/objects/traits/expires.rb index 529747e..9c8abf6 100644 --- a/lib/aethyr/core/objects/traits/expires.rb +++ b/lib/aethyr/core/objects/traits/expires.rb @@ -18,6 +18,6 @@ module Expires private def expire - add_event Event.new(:Mobiles, :action => :expire, :player => self) + raise "expire is not yet properly implemented" end end diff --git a/lib/aethyr/core/objects/traits/location.rb b/lib/aethyr/core/objects/traits/location.rb index cdb679d..8045891 100644 --- a/lib/aethyr/core/objects/traits/location.rb +++ b/lib/aethyr/core/objects/traits/location.rb @@ -4,7 +4,6 @@ require 'aethyr/core/util/log' require 'aethyr/core/objects/inventory' require 'aethyr/core/objects/traits/pronoun' require 'aethyr/core/util/guid' -require 'observer' require 'aethyr/core/objects/info/info' module Location @@ -17,12 +16,12 @@ module Location info.terrain.type = terrain_type end end - + def area return self if self.is_a? Area self.parent_area end - + def parent_area return nil if $manager.nil? parent_id = @container @@ -33,17 +32,17 @@ module Location end nil end - + def flags collected_flags = self.parent_area.flags unless self.parent_area.nil? return info.flags.dup if collected_flags.nil? - + self.info.flags.values.each do |f| f.negate_flags(collected_flags) end collected_flags.merge! self.info.flags end - + def terrain_type return info.terrain.type unless info.terrain.type.nil? return self.parent_area.terrain_type unless self.parent_area.nil? diff --git a/lib/aethyr/core/objects/traits/reacts.rb b/lib/aethyr/core/objects/traits/reacts.rb index 529d71a..716b243 100644 --- a/lib/aethyr/core/objects/traits/reacts.rb +++ b/lib/aethyr/core/objects/traits/reacts.rb @@ -64,7 +64,8 @@ module Reacts unless action.nil? log "I am doing an action...", Logger::Ultimate changed - notify_observers(action) + #notify_observers(action) + raise "This used to notify observers, not sure how this worked so need to fix this, most likely this will be rewritten before it becomes an issue." else log "Action did not parse: #{reaction}", Logger::Medium end @@ -118,7 +119,8 @@ module Reacts event = CommandParser.parse(self, command) return false if event.nil? #failed to parse - add_event event unless delay + raise "removed events this class no longer works, will probably be rewritten" + #add_event event unless delay event end @@ -273,7 +275,8 @@ module Reacts def teleport item, destination, options = {} event = Event.new :Mobiles, {:action => :teleport, :player => self, :object => item, :in => destination}.merge(options) - add_event event + raise "re removed events this class no longer works and will probably be rewritten" + # add_event event end def follow object, message = nil diff --git a/lib/aethyr/core/objects/traits/respawns.rb b/lib/aethyr/core/objects/traits/respawns.rb index 078afc5..98c211a 100644 --- a/lib/aethyr/core/objects/traits/respawns.rb +++ b/lib/aethyr/core/objects/traits/respawns.rb @@ -59,6 +59,7 @@ module Respawns return end - add_event Event.new(:Mobiles, :player => self, :action => :respawn, :room => room) + raise "respawn no longer works, removed events, will likely be rewritten" + #add_event Event.new(:Mobiles, :player => self, :action => :respawn, :room => room) end end -- GitLab