blob: d6c0a2344a2cf61e18d9ddf460a6b98ec0e7e368 [file] [log] [blame] [raw]
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))
}
}