mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 03:15:35 -04:00
eros: unregister LAN server event
This commit is contained in:
parent
68deecfa16
commit
ce4b5e0352
@ -37,4 +37,6 @@ abstract class JavaFXController : Initializable {
|
||||
open fun init() {}
|
||||
|
||||
open fun postInit() {}
|
||||
|
||||
open fun terminate() {}
|
||||
}
|
||||
|
@ -54,18 +54,27 @@ class PlayMainController : EmbeddedJavaFXController<Pane>() {
|
||||
}
|
||||
playTypeListViewFX.items += ServerType(FontAwesomeSolid.NETWORK_WIRED, "LAN", "12 Servers", "") {
|
||||
return@ServerType JavaFXUtil.loadEmbeddedController<ServerListController>(ServerListController.LAYOUT).apply {
|
||||
val invoker = Minosoft.GLOBAL_EVENT_MASTER.registerEvent(JavaFXEventInvoker.of<LANServerDiscoverEvent> { refreshList() })
|
||||
readOnly = true
|
||||
customRefresh = {
|
||||
LANServerListener.SERVERS.clear()
|
||||
LANServerListener.clear()
|
||||
refreshList()
|
||||
}
|
||||
customTerminate = {
|
||||
Minosoft.GLOBAL_EVENT_MASTER.unregisterEvent(invoker)
|
||||
LANServerListener.clear()
|
||||
}
|
||||
LANServerListener.clear()
|
||||
servers = LANServerListener.SERVERS.values
|
||||
Minosoft.GLOBAL_EVENT_MASTER.registerEvent(JavaFXEventInvoker.of<LANServerDiscoverEvent> { refreshList() }) // ToDo: Unregister event when hiding pane
|
||||
Minosoft.GLOBAL_EVENT_MASTER.registerEvent(JavaFXEventInvoker.of<LANServerDiscoverEvent> { refreshList() })
|
||||
refreshList()
|
||||
}
|
||||
}
|
||||
|
||||
playTypeListViewFX.selectionModel.selectedItemProperty().addListener { _, _, new ->
|
||||
if (this::currentController.isInitialized) {
|
||||
currentController.terminate()
|
||||
}
|
||||
currentController = new.content()
|
||||
playTypeContentFX.children.setAll(currentController.root)
|
||||
}
|
||||
|
@ -68,6 +68,8 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
|
||||
var customRefresh: (() -> Unit)? = null
|
||||
|
||||
var customTerminate: (() -> Unit)? = null
|
||||
|
||||
var servers: MutableCollection<Server> = mutableListOf()
|
||||
|
||||
var readOnly: Boolean = false
|
||||
@ -292,6 +294,11 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
}
|
||||
}
|
||||
|
||||
override fun terminate() {
|
||||
super.terminate()
|
||||
customTerminate?.invoke()
|
||||
}
|
||||
|
||||
|
||||
companion object {
|
||||
val LAYOUT = "minosoft:eros/main/play/server/server_list.fxml".asResourceLocation()
|
||||
|
@ -21,6 +21,6 @@ interface AbstractEventMaster : Iterable<EventInvoker> {
|
||||
|
||||
fun fireEvent(event: Event): Boolean
|
||||
|
||||
fun registerEvent(invoker: EventInvoker)
|
||||
fun <T : EventInvoker> registerEvent(invoker: T): T
|
||||
fun registerEvents(vararg invoker: EventInvoker)
|
||||
}
|
||||
|
@ -63,16 +63,17 @@ open class EventMaster(vararg parents: AbstractEventMaster) : AbstractEventMaste
|
||||
eventInvokers -= method ?: return
|
||||
}
|
||||
|
||||
override fun registerEvent(invoker: EventInvoker) {
|
||||
override fun <T : EventInvoker> registerEvent(invoker: T): T {
|
||||
eventInvokers += invoker
|
||||
|
||||
if (invoker is EventInstantFireable && invoker.instantFire) {
|
||||
val companion = invoker.kEventType?.companionObjectInstance ?: return
|
||||
val companion = invoker.kEventType?.companionObjectInstance ?: return invoker
|
||||
|
||||
if (companion is EventInstantFire<*>) {
|
||||
invoker.invoke(companion.fire())
|
||||
}
|
||||
}
|
||||
return invoker
|
||||
}
|
||||
|
||||
override fun registerEvents(vararg invokers: EventInvoker) {
|
||||
|
@ -77,8 +77,8 @@ abstract class Connection : AbstractEventMaster {
|
||||
eventMaster.unregisterEvent(invoker)
|
||||
}
|
||||
|
||||
override fun registerEvent(invoker: EventInvoker) {
|
||||
eventMaster.registerEvent(invoker)
|
||||
override fun <T : EventInvoker> registerEvent(invoker: T): T {
|
||||
return eventMaster.registerEvent(invoker)
|
||||
}
|
||||
|
||||
override fun registerEvents(vararg invokers: EventInvoker) {
|
||||
|
@ -178,7 +178,7 @@ class StatusConnection(
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerEvent(invoker: EventInvoker) {
|
||||
override fun <T : EventInvoker> registerEvent(invoker: T): T {
|
||||
if (invoker is EventInstantFireable && !invoker.instantFire) {
|
||||
return super.registerEvent(invoker)
|
||||
}
|
||||
@ -204,5 +204,6 @@ class StatusConnection(
|
||||
}
|
||||
else -> TODO()
|
||||
}
|
||||
return invoker
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import de.bixilon.minosoft.config.server.Server
|
||||
import de.bixilon.minosoft.data.text.BaseComponent
|
||||
import de.bixilon.minosoft.data.text.ChatComponent
|
||||
import de.bixilon.minosoft.modding.event.events.LANServerDiscoverEvent
|
||||
import de.bixilon.minosoft.util.KUtil.toSynchronizedMap
|
||||
import de.bixilon.minosoft.util.Util
|
||||
import de.bixilon.minosoft.util.logging.Log
|
||||
import de.bixilon.minosoft.util.logging.LogLevels
|
||||
@ -94,4 +95,12 @@ object LANServerListener {
|
||||
val motd = Util.getStringBetween(broadcast, MOTD_START_STRING, MOTD_END_STRING)
|
||||
return Server(address = address.hostAddress + ":" + rawAddress, name = BaseComponent("LAN: #${SERVERS.size}: ", ChatComponent.of(motd)))
|
||||
}
|
||||
|
||||
|
||||
fun clear() {
|
||||
for (server in SERVERS.toSynchronizedMap().values) {
|
||||
server.favicon = null
|
||||
}
|
||||
SERVERS.clear()
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user