Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

ServerStateHandler.kt 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package com.dmdirc.ktirc.events
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.model.ServerState
  4. import com.dmdirc.ktirc.model.ServerStatus
  5. import java.time.LocalDateTime
  6. internal class ServerStateHandler : EventHandler {
  7. override fun processEvent(client: IrcClient, event: IrcEvent): List<IrcEvent> {
  8. when (event) {
  9. is ServerConnecting -> client.serverState.status = ServerStatus.Connecting
  10. is ServerConnected -> client.serverState.status = ServerStatus.Negotiating
  11. is ServerDisconnected -> client.serverState.status = ServerStatus.Disconnected
  12. is ServerWelcome -> handleWelcome(client.serverState, event.server, event.localNick)
  13. is ServerFeaturesUpdated -> client.serverState.features.setAll(event.serverFeatures)
  14. // Events that won't trigger a server ready event
  15. is PingReceived -> Unit
  16. is ServerCapabilitiesReceived -> Unit
  17. is ServerCapabilitiesAcknowledged -> Unit
  18. is ServerCapabilitiesFinished -> Unit
  19. else -> return checkReadyState(client, event.time)
  20. }
  21. return emptyList()
  22. }
  23. private fun handleWelcome(serverState: ServerState, server: String, localNick: String) {
  24. serverState.receivedWelcome = true
  25. serverState.serverName = server
  26. serverState.localNickname = localNick
  27. }
  28. private fun checkReadyState(client: IrcClient, time: LocalDateTime): List<IrcEvent> {
  29. if (client.serverState.receivedWelcome && client.serverState.status == ServerStatus.Negotiating) {
  30. client.serverState.status = ServerStatus.Ready
  31. return listOf(ServerReady(time))
  32. }
  33. return emptyList()
  34. }
  35. }