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.

CapabilitiesHandler.kt 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.dmdirc.ktirc.events
  2. import com.dmdirc.ktirc.IrcClient
  3. import com.dmdirc.ktirc.messages.capabilityEndMessage
  4. import com.dmdirc.ktirc.messages.capabilityRequestMessage
  5. import com.dmdirc.ktirc.model.CapabilitiesNegotiationState
  6. import com.dmdirc.ktirc.model.CapabilitiesState
  7. import com.dmdirc.ktirc.model.Capability
  8. import com.dmdirc.ktirc.util.logger
  9. class CapabilitiesHandler : EventHandler {
  10. private val log by logger()
  11. override suspend fun processEvent(client: IrcClient, event: IrcEvent) {
  12. when (event) {
  13. is ServerCapabilitiesReceived -> handleCapabilitiesReceived(client.serverState.capabilities, event.capabilities)
  14. is ServerCapabilitiesFinished -> handleCapabilitiesFinished(client)
  15. is ServerCapabilitiesAcknowledged -> handleCapabilitiesAcknowledged(client, event.capabilities)
  16. }
  17. }
  18. private fun handleCapabilitiesReceived(state: CapabilitiesState, capabilities: Map<Capability, String>) {
  19. state.advertisedCapabilities.putAll(capabilities)
  20. }
  21. private suspend fun handleCapabilitiesFinished(client: IrcClient) {
  22. // TODO: We probably need to split the outgoing REQ lines if there are lots of caps
  23. // TODO: For caps with values we'll need to decide which value to use/whether to enable them/etc
  24. with (client.serverState.capabilities) {
  25. negotiationState = CapabilitiesNegotiationState.AWAITING_ACK
  26. advertisedCapabilities.keys.map { it.name }.let {
  27. log.info { "Requesting capabilities: ${it.toList()}" }
  28. client.send(capabilityRequestMessage(it))
  29. }
  30. }
  31. }
  32. private suspend fun handleCapabilitiesAcknowledged(client: IrcClient, capabilities: Map<Capability, String>) {
  33. // TODO: Check if everything we wanted is enabled
  34. with (client.serverState.capabilities) {
  35. log.info { "Acknowledged capabilities: ${capabilities.keys.map { it.name }.toList()}" }
  36. negotiationState = CapabilitiesNegotiationState.FINISHED
  37. enabledCapabilities.putAll(capabilities)
  38. client.send(capabilityEndMessage())
  39. }
  40. }
  41. }