Skip to content
Snippets Groups Projects
Select Git revision
  • 49ca901b1792436a562e23c0838339f50bb07fa9
  • main default protected
  • wip
  • ChenZhangg-Modify_GRADLE_1
  • jetpack-compose-rewrite
  • demo-jump-in-history
  • attachments
  • 1.7.0 protected
  • 1.6.2 protected
  • 1.6.1 protected
  • 1.6.0 protected
  • 1.5.3 protected
  • 1.5.2 protected
  • 1.5.1 protected
  • 1.5.0 protected
  • 1.4.4 protected
  • 1.4.3 protected
  • 1.4.2 protected
  • 1.4.1 protected
  • 1.4.0 protected
  • v1.3.3 protected
  • v1.3.2 protected
  • v1.3.1 protected
  • v1.3.0 protected
  • v1.2.28 protected
  • v1.2.27 protected
  • v1.2.26 protected
27 results

MessageRunnable.kt

Blame
  • MessageRunnable.kt 1.95 KiB
    /*
     * Quasseldroid - Quassel client for Android
     *
     * Copyright (c) 2018 Janne Koschinski
     * Copyright (c) 2018 The Quassel Project
     *
     * This program is free software: you can redistribute it and/or modify it
     * under the terms of the GNU General Public License version 3 as published
     * by the Free Software Foundation.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License along
     * with this program.  If not, see <http://www.gnu.org/licenses/>.
     */
    
    package de.kuschku.libquassel.connection
    
    import de.kuschku.libquassel.protocol.primitive.serializer.Serializer
    import de.kuschku.libquassel.quassel.QuasselFeatures
    import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log
    import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.WARN
    import de.kuschku.libquassel.util.helpers.write
    import de.kuschku.libquassel.util.nio.ChainedByteBuffer
    import de.kuschku.libquassel.util.nio.WrappedChannel
    import java.nio.ByteBuffer
    import java.util.concurrent.atomic.AtomicReference
    
    class MessageRunnable<T>(
      private val data: T,
      private val serializer: Serializer<T>,
      private val chainedBuffer: ChainedByteBuffer,
      private val channel: WrappedChannel?,
      private val features: QuasselFeatures
    ) : () -> Unit {
      override fun invoke() {
        try {
          serializer.serialize(chainedBuffer, data, features)
          val sizeBuffer = ByteBuffer.allocateDirect(4)
          sizeBuffer.putInt(chainedBuffer.size)
          sizeBuffer.flip()
          channel?.write(sizeBuffer)
          channel?.write(chainedBuffer)
          channel?.flush()
          lastSent.set(data)
        } catch (e: Throwable) {
          log(WARN, "MessageDispatching", e)
        }
      }
    
      companion object {
        val lastSent = AtomicReference<Any>()
      }
    }