選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

ServerStateHandler.kt 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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.server, 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, server: String, localNick: String) {
  22. serverState.receivedWelcome = true
  23. serverState.serverName = server
  24. serverState.localNickname = localNick
  25. }
  26. private fun checkReadyState(client: IrcClient, time: LocalDateTime): List<IrcEvent> {
  27. if (client.serverState.receivedWelcome && client.serverState.status == ServerStatus.Negotiating) {
  28. client.serverState.status = ServerStatus.Ready
  29. return listOf(ServerReady(time))
  30. }
  31. return emptyList()
  32. }
  33. }