You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ServerStateHandler.kt 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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 ServerConnected -> client.serverState.status = ServerStatus.Negotiating
  10. is ServerWelcome -> handleWelcome(client.serverState, event.localNick)
  11. is ServerFeaturesUpdated -> client.serverState.features.setAll(event.serverFeatures)
  12. // Events that won't trigger a server ready event
  13. is PingReceived -> Unit
  14. is ServerCapabilitiesReceived -> Unit
  15. is ServerCapabilitiesAcknowledged -> Unit
  16. is ServerCapabilitiesFinished -> Unit
  17. else -> return checkReadyState(client, event.time)
  18. }
  19. return emptyList()
  20. }
  21. private fun handleWelcome(serverState: ServerState, localNick: String) {
  22. serverState.receivedWelcome = true
  23. serverState.localNickname = localNick
  24. }
  25. private fun checkReadyState(client: IrcClient, time: LocalDateTime): List<IrcEvent> {
  26. if (client.serverState.receivedWelcome && client.serverState.status == ServerStatus.Negotiating) {
  27. client.serverState.status = ServerStatus.Ready
  28. return listOf(ServerReady(time))
  29. }
  30. return emptyList()
  31. }
  32. }