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.

CapabilitiesState.kt 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package com.dmdirc.ktirc.model
  2. class CapabilitiesState {
  3. var negotiationState: CapabilitiesNegotiationState = CapabilitiesNegotiationState.AWAITING_LIST
  4. val advertisedCapabilities = HashMap<Capability, String>()
  5. val enabledCapabilities = HashMap<Capability, String>()
  6. }
  7. enum class CapabilitiesNegotiationState {
  8. AWAITING_LIST,
  9. AWAITING_ACK,
  10. FINISHED
  11. }
  12. @Suppress("unused")
  13. sealed class Capability(val name: String) {
  14. // Capabilities that enable more information in message tags:
  15. object ServerTimeMessageTag : Capability("server-time")
  16. object UserAccountMessageTag : Capability("account-tag")
  17. // Capabilities that extend existing commands to supply extra information:
  18. object HostsInNamesReply : Capability("userhost-in-names")
  19. object MultipleUserModePrefixes : Capability("multi-prefix")
  20. object AccountAndRealNameInJoinMessages : Capability("extended-join")
  21. // Capabilities that affect how messages are sent/received:
  22. object EchoMessages : Capability("echo-message")
  23. // Capabilities that notify us of changes to other clients:
  24. object AccountChangeMessages : Capability("account-notify") // TODO: Add processor
  25. object AwayStateMessages : Capability("away-notify") // TODO: Add processor
  26. object HostChangeMessages : Capability("chghost") // TODO: Add processor
  27. }
  28. internal val capabilities: Map<String, Capability> by lazy {
  29. Capability::class.nestedClasses.map { it.objectInstance as Capability }.associateBy { it.name }
  30. }