| package li.cil.oc.common |
| |
| import com.google.common.cache.CacheBuilder |
| import li.cil.oc.api.network.ManagedEnvironment |
| |
| /** |
| * Keeps track of loaded components by ID. Used to send messages between |
| * component representation on server and client without knowledge of their |
| * containers. For now this is only used for screens / text buffer components. |
| */ |
| abstract class ComponentTracker { |
| private val components = com.google.common.cache.CacheBuilder.newBuilder(). |
| weakValues(). |
| asInstanceOf[CacheBuilder[String, ManagedEnvironment]]. |
| build[String, ManagedEnvironment]() |
| |
| def add(address: String, component: ManagedEnvironment) { |
| this.synchronized { |
| components.put(address, component) |
| } |
| } |
| |
| def remove(address: String) { |
| this.synchronized { |
| components.invalidate(address) |
| components.cleanUp() |
| } |
| } |
| |
| def get(address: String): Option[ManagedEnvironment] = this.synchronized { |
| components.cleanUp() |
| Option(components.getIfPresent(address)) |
| } |
| } |