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.8KB

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