package { import flash.events.Event; import flash.utils.*; import flash.text.engine.EastAsianJustifier; public class Registry extends PollableBaseRegistry { private var subRegistries:Array; private var numRegistriesPolled:int; private var refreshRate:int; public function Registry(refreshRate:int) { this.subRegistries = []; this.numRegistriesPolled = 0; this.refreshRate = refreshRate; setInterval(this.poll, this.refreshRate); } public function addSubRegistry(subRegistry:IPollableRegistry, registryCallback:Function = null) { this.subRegistries.push(subRegistry); subRegistry.addEventListener(subRegistry.getUpdateEventType(), this.updated); subRegistry.addEventListener(subRegistry..getCycleCompleteEventType(), this.cycleComplete); } private function poll() { // This acts as a lock. After all the registries are polled, it resets to 0 // so we know it's safe to poll again. if(this.numRegistriesPolled === 0) { for each(var subRegistry:Object in this.subRegistries) { this.numRegistriesPolled++; var fn:Function = subRegistry.getPollableFunction(); fn(); } } } private function updated(e:PollEvent) { trace(e.pollTarget.getLastUpdated()); } private function cycleComplete(e:PollEvent) { if(this.numRegistriesPolled == this.subRegistries.length) { //trace("polling complete"); this.numRegistriesPolled = 0; } } } }