All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.twitter.finagle.thrift.ThriftClientBufferedCodec.scala Maven / Gradle / Ivy

The newest version!
package com.twitter.finagle.thrift

import org.jboss.netty.channel.ChannelPipelineFactory
import com.twitter.finagle.{CodecFactory, ClientCodecConfig}
import org.apache.thrift.protocol.TProtocolFactory

/**
 * ThriftClientBufferedCodec implements a buffered thrift transport
 * that supports upgrading in order to provide TraceContexts across
 * requests.
 */
object ThriftClientBufferedCodec {
  /**
   * Create a [[com.twitter.finagle.thrift.ThriftClientBufferedCodecFactory]]
   */
  def apply() = new ThriftClientBufferedCodecFactory

  def apply(protocolFactory: TProtocolFactory) =
    new ThriftClientBufferedCodecFactory(protocolFactory)

}

class ThriftClientBufferedCodecFactory(protocolFactory: TProtocolFactory) extends
  CodecFactory[ThriftClientRequest, Array[Byte]]#Client
{
  def this() = this(Protocols.binaryFactory())
  /**
   * Create a [[com.twitter.finagle.thrift.ThriftClientBufferedCodec]]
   * with a default TBinaryProtocol.
   */
  def apply(config: ClientCodecConfig) = {
    new ThriftClientBufferedCodec(protocolFactory, config)
  }
}

class ThriftClientBufferedCodec(protocolFactory: TProtocolFactory, config: ClientCodecConfig)
  extends ThriftClientFramedCodec(protocolFactory, config)
{
  override def pipelineFactory = {
    val framedPipelineFactory = super.pipelineFactory

    new ChannelPipelineFactory {
      def getPipeline() = {
        val pipeline = framedPipelineFactory.getPipeline
        pipeline.replace(
          "thriftFrameCodec", "thriftBufferDecoder",
          new ThriftBufferDecoder(protocolFactory))
        pipeline
      }
    }
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy