Skip to content

Instantly share code, notes, and snippets.

@caniszczyk
Created February 10, 2014 17:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save caniszczyk/8920924 to your computer and use it in GitHub Desktop.
Save caniszczyk/8920924 to your computer and use it in GitHub Desktop.
Netty3 based Transport in Finagle
case class Netty3Transporter[In, Out](
pipelineFactory: ChannelPipelineFactory,
newChannel: ChannelPipeline => Channel =
Netty3Transporter.channelFactory.newChannel(_),
newTransport: Channel => Transport[In, Out] =
new ChannelTransport[In, Out](_),
// various timeout/ssl options
) extends (
(SocketAddress, StatsReceiver) => Future[Transport[In, Out]]
){
private def newPipeline(
addr: SocketAddress,
statsReceiver: StatsReceiver
)={
val pipeline = pipelineFactory.getPipeline()
// add stats, timeouts, and ssl handlers
pipeline // #1
}
private def newConfiguredChannel(
addr: SocketAddress,
statsReceiver: StatsReceiver
)={
val ch = newChannel(newPipeline(addr, statsReceiver))
ch.getConfig.setOptions(channelOptions.asJava)
ch
}
def apply(
addr: SocketAddress,
statsReceiver: StatsReceiver
): Future[Transport[In, Out]] = {
val conn = new ChannelConnector[In, Out](
() => newConfiguredChannel(addr, statsReceiver),
newTransport, statsReceiver) // #2
conn(addr)
} }
// #1 Create a new ChannelPipeline and add the needed handlers
// #2 Create a new ChannelConnector which is used internally
// see https://github.com/twitter/finagle/blob/master/finagle-core/src/main/scala/com/twitter/finagle/netty3/client.scala
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment