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.

IrcMessage.kt 978B

1234567891011121314151617181920212223242526272829
  1. package com.dmdirc.ktirc.model
  2. import java.time.Instant
  3. import java.time.LocalDateTime
  4. import java.time.ZoneId
  5. class IrcMessage(val tags: Map<MessageTag, String>, val prefix: ByteArray?, val command: String, val params: List<ByteArray>) {
  6. companion object {
  7. internal var currentTimeZoneProvider = { ZoneId.systemDefault() }
  8. internal var currentTimeProvider = { LocalDateTime.now(currentTimeZoneProvider()) }
  9. }
  10. val time: LocalDateTime = if (MessageTag.ServerTime in tags) {
  11. LocalDateTime.ofInstant(Instant.parse(tags[MessageTag.ServerTime]), currentTimeZoneProvider())
  12. } else {
  13. currentTimeProvider()
  14. }
  15. }
  16. sealed class MessageTag(val name: String) {
  17. object AccountName : MessageTag("account")
  18. object ServerTime : MessageTag("time")
  19. }
  20. val messageTags: Map<String, MessageTag> by lazy {
  21. MessageTag::class.nestedClasses.map { it.objectInstance as MessageTag }.associateBy { it.name }
  22. }