当前位置: 首页>>代码示例>>Scala>>正文


Scala SocketAddress类代码示例

本文整理汇总了Scala中java.net.SocketAddress的典型用法代码示例。如果您正苦于以下问题:Scala SocketAddress类的具体用法?Scala SocketAddress怎么用?Scala SocketAddress使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了SocketAddress类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Scala代码示例。

示例1: SocketUtil

//设置package包名称以及导入依赖的类
package akka.testkit

import scala.collection.immutable
import java.net.InetSocketAddress
import java.net.SocketAddress
import java.nio.channels.DatagramChannel
import java.nio.channels.ServerSocketChannel


object SocketUtil {

  import scala.language.reflectiveCalls

  // Structural type needed since DatagramSocket and ServerSocket has no common ancestor apart from Object
  private type GeneralSocket = {
    def bind(sa: SocketAddress): Unit
    def close(): Unit
    def getLocalPort(): Int
  }

  def temporaryServerAddress(address: String = "127.0.0.1", udp: Boolean = false): InetSocketAddress =
    temporaryServerAddresses(1, address, udp).head

  def temporaryServerAddresses(numberOfAddresses: Int, hostname: String = "127.0.0.1", udp: Boolean = false): immutable.IndexedSeq[InetSocketAddress] = {
    Vector.fill(numberOfAddresses) {
      val serverSocket: GeneralSocket =
        if (udp) DatagramChannel.open().socket()
        else ServerSocketChannel.open().socket()

      serverSocket.bind(new InetSocketAddress(hostname, 0))
      (serverSocket, new InetSocketAddress(hostname, serverSocket.getLocalPort))
    } collect { case (socket, address) ? socket.close(); address }
  }

} 
开发者ID:love1314sea,项目名称:akka-2.3.16,代码行数:36,代码来源:SocketUtil.scala

示例2: UdpAssociationHandle

//设置package包名称以及导入依赖的类
package akka.remote.transport.netty

import akka.actor.Address
import akka.remote.transport.AssociationHandle
import akka.remote.transport.AssociationHandle.{ HandleEventListener, InboundPayload }
import akka.remote.transport.Transport.AssociationEventListener
import akka.util.ByteString
import java.net.{ SocketAddress, InetAddress, InetSocketAddress }
import org.jboss.netty.buffer.{ ChannelBuffer, ChannelBuffers }
import org.jboss.netty.channel._
import scala.concurrent.{ Future, Promise }


private[remote] class UdpAssociationHandle(val localAddress: Address,
                                           val remoteAddress: Address,
                                           private val channel: Channel,
                                           private val transport: NettyTransport) extends AssociationHandle {

  override val readHandlerPromise: Promise[HandleEventListener] = Promise()

  override def write(payload: ByteString): Boolean = {
    if (!channel.isConnected)
      channel.connect(new InetSocketAddress(InetAddress.getByName(remoteAddress.host.get), remoteAddress.port.get))

    if (channel.isWritable && channel.isOpen) {
      channel.write(ChannelBuffers.wrappedBuffer(payload.asByteBuffer))
      true
    } else false
  }

  override def disassociate(): Unit = try channel.close()
  finally transport.udpConnectionTable.remove(transport.addressToSocketAddress(remoteAddress))

} 
开发者ID:love1314sea,项目名称:akka-2.3.16,代码行数:35,代码来源:UdpSupport.scala

示例3: NioSocketChannel

//设置package包名称以及导入依赖的类
package knot.remote.channel

import java.net.SocketAddress
import java.nio.ByteBuffer
import java.nio.channels.SocketChannel

object NioSocketChannel {
  def apply(): NioSocketChannel = new NioSocketChannel(SocketChannel.open())
}

class NioSocketChannel(override val channel: SocketChannel) extends NioChannel(channel) {
  lazy val incomingBuffer: ByteBuffer = ByteBuffer.allocate(1)
  lazy val outgoingBuffer: ByteBuffer = ByteBuffer.allocate(1)

  def connect(socketAddress: SocketAddress): Boolean = channel.connect(socketAddress)

  def finishConnect: Boolean = channel.finishConnect()

  override def bind(address: SocketAddress): Unit = channel.bind(address)

  override def readInternal(): Int = {
    val r = channel.read(incomingBuffer)
    incomingBuffer.flip()
    r
  }

  override def writeInternal(bytes: Array[Byte]): Unit = {
    outgoingBuffer.put(bytes)
  }

  override def flushInternal(): Unit = {
    if (!isFlushPending) {
      setOpWrite()
      outgoingBuffer.flip()
      val r = channel.write(outgoingBuffer)
      log.debug(s"CLIENT: Write. $r")
      if (!outgoingBuffer.hasRemaining) {
        outgoingBuffer.clear()
        clearOpWrite()
      }
    }
  }
} 
开发者ID:defvar,项目名称:knot,代码行数:44,代码来源:NioSocketChannel.scala

示例4: ThriftMuxClient

//设置package包名称以及导入依赖的类
package com.example

import java.net.SocketAddress

import com.twitter.finagle._
import com.twitter.finagle.example.thriftscala.Hello
import com.twitter.finagle.param.Label
import com.twitter.finagle.thrift.ThriftClientRequest
import com.twitter.util.{Await, Future}

object ThriftMuxClient {
  def main(args: Array[String]) {
    val futureIface = FilteredThriftMux.newIface[Hello.FutureIface]("localhost:8081")
    println(Await.result(futureIface.hi()))
  }
}

object FilteredThriftMux extends Client[ThriftClientRequest, Array[Byte]]
  with ThriftRichClient
  with Server[Array[Byte], Array[Byte]] with ThriftRichServer {
  import ThriftMux._

  val filter = new SimpleFilter[ThriftClientRequest, Array[Byte]] {
    override def apply(request: ThriftClientRequest, service: Service[ThriftClientRequest, Array[Byte]]): Future[Array[Byte]] = {
      println("Filtered")
      service(request)
    }
  }

  override def newService(dest: Name, label: String): Service[ThriftClientRequest, Array[Byte]] = {
    filter andThen ThriftMux.newService(dest, label)
  }

  override def newClient(dest: Name, label: String): ServiceFactory[ThriftClientRequest, Array[Byte]] = ThriftMux.newClient(dest, label)

  override protected def params: Stack.Params = client.params

  override protected lazy val Label(defaultClientName) = Thrift.client.params[Label]

  override def serve(addr: SocketAddress, service: ServiceFactory[Array[Byte], Array[Byte]]): ListeningServer = ThriftMux.serve(addr, service)

  override protected val Thrift.param.ProtocolFactory(protocolFactory) = Thrift.client.params[Thrift.param.ProtocolFactory]
} 
开发者ID:vtatai,项目名称:finagleThriftPlayground,代码行数:44,代码来源:ThriftMuxClient.scala

示例5: TransportImpl

//设置package包名称以及导入依赖的类
package com.twitter.finagle.mysql.transport

import com.twitter.finagle.client.Transporter
import com.twitter.finagle.framer.LengthFieldFramer
import com.twitter.finagle.mysql.Toggles
import com.twitter.finagle.netty3.Netty3Transporter
import com.twitter.finagle.netty4.Netty4Transporter
import com.twitter.finagle.server.ServerInfo
import com.twitter.finagle.Stack
import com.twitter.finagle.toggle.Toggle
import com.twitter.finagle.transport.Transport
import com.twitter.util.Future
import java.net.SocketAddress


object TransportImpl {
  private val UseNetty4ToggleId: String = "com.twitter.finagle.mysql.UseNetty4"
  private val netty4Toggle: Toggle[Int] = Toggles(UseNetty4ToggleId)
  private def useNetty4: Boolean = netty4Toggle(ServerInfo().id.hashCode)

  val Netty3: TransportImpl = TransportImpl(params => Netty3Transporter(MysqlClientPipelineFactory, params))

  val Netty4: TransportImpl = TransportImpl { params =>
    new Transporter[Packet, Packet] {
      private[this] val bufTransporter = Netty4Transporter(Some(framerFactory), params)
      def apply(addr: SocketAddress): Future[Transport[Packet, Packet]] = {
        bufTransporter(addr).map { bufTransport =>
          bufTransport.map(_.toBuf, Packet.fromBuf)
        }
      }
      // Used in the registry
      override def toString = bufTransporter.toString
    }
  }

  implicit val param: Stack.Param[TransportImpl] = Stack.Param(
    if (useNetty4) Netty4
    else Netty3
  )

  private val framerFactory = () => {
    new LengthFieldFramer(
      lengthFieldBegin = 0,
      lengthFieldLength = 3,
      lengthAdjust = Packet.HeaderSize, // Packet size field doesn't include the header size.
      maxFrameLength = Packet.HeaderSize + Packet.MaxBodySize,
      bigEndian = false
    )
  }
}

case class TransportImpl(transporter: Stack.Params => Transporter[Packet, Packet]) {
  def mk(): (TransportImpl, Stack.Param[TransportImpl]) = {
    (this, TransportImpl.param)
  }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:57,代码来源:TransportImpl.scala

示例6: Available

//设置package包名称以及导入依赖的类
package com.twitter.finagle.context

import com.twitter.finagle.thrift.ClientId
import com.twitter.finagle.tracing.TraceId
import java.net.SocketAddress


  case class Available(
      upstreamAddr: Option[SocketAddress],
      upstreamId: Option[ClientId],
      downstreamAddr: Option[SocketAddress],
      downstreamId: Option[ClientId],
      traceId: TraceId)
    extends RemoteInfo
  {
    private[this] val upstreamAddrStr = upstreamAddr match {
      case Some(addr) => addr.toString
      case None => "Not Available"
    }
    private[this] val upstreamIdStr = upstreamId match {
      case Some(clientId) => clientId.name
      case None => "Not Available"
    }
    private[this] val downstreamAddrStr = downstreamAddr match {
      case Some(addr) => addr.toString
      case None => "Not Available"
    }
    private[this] val downstreamIdStr = downstreamId match {
      case Some(clientId) => clientId.name
      case None => "Not Available"
    }

    override def toString(): String =
      s"Upstream Address: $upstreamAddrStr, Upstream Client Id: $upstreamIdStr, " +
      s"Downstream Address: $downstreamAddrStr, Downstream Client Id: $downstreamIdStr, " +
      s"Trace Id: $traceId"
  }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:39,代码来源:RemoteInfo.scala

示例7: ServerRegistry

//设置package包名称以及导入依赖的类
package com.twitter.finagle.server

import com.twitter.finagle.util.{InetSocketAddressUtil, StackRegistry}
import com.twitter.logging.Level
import java.net.SocketAddress
import java.util.logging.Logger

private[twitter] object ServerRegistry extends StackRegistry {
  private val log = Logger.getLogger(getClass.getName)
  private var addrNames = Map[SocketAddress, String]()

  def registryName: String = "server"

  // This is a terrible hack until we have a better
  // way of labeling addresses.
  def register(addr: String): SocketAddress = synchronized {
    addr.split("=", 2) match {
      case Array(addr) =>
        val Seq(ia) = InetSocketAddressUtil.parseHosts(addr)
        ia
      case Array(name, addr) =>
        log.log(Level.WARNING, "Labeling servers with the <label>=<addr>" +
          " syntax is deprecated! Configure your server with a" +
          " com.twitter.finagle.param.Label instead.")
        val Seq(ia) = InetSocketAddressUtil.parseHosts(addr)
        addrNames += (ia -> name)
        ia
    }
  }

  def nameOf(addr: SocketAddress): Option[String] = synchronized {
    addrNames.get(addr)
  }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:35,代码来源:ServerRegistry.scala

示例8: socksProxyHost

//设置package包名称以及导入依赖的类
package com.twitter.finagle
package socks

import com.twitter.app.GlobalFlag
import java.net.{SocketAddress, InetSocketAddress}

private[finagle] object socksProxyHost extends GlobalFlag("", "SOCKS proxy host") { override val name = "socksProxyHost" }
private[finagle] object socksProxyPort extends GlobalFlag(0, "SOCKS proxy port") { override val name = "socksProxyPort" }
private[finagle] object socksUsernameFlag extends GlobalFlag("", "SOCKS username") { override val name = "socksUsername" }
private[finagle] object socksPasswordFlag extends GlobalFlag("", "SOCKS password") { override val name = "socksPassword" }

private[finagle] object SocksProxyFlags {
  def socksProxy: Option[SocketAddress] =
    (socksProxyHost.get, socksProxyPort.get) match {
      case (Some(host), Some(port)) => Some(new InetSocketAddress(host, port))
      case _ => None
    }

  def socksUsernameAndPassword: Option[(String, String)] =
    (socksUsernameFlag.get, socksPasswordFlag.get) match {
      case (Some(username), Some(password)) => Some((username,password))
      case _ => None
    }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:25,代码来源:SocksProxyFlags.scala

示例9: ExceptionRemoteInfoFactory

//设置package包名称以及导入依赖的类
package com.twitter.finagle.service

import java.net.SocketAddress

import com.twitter.finagle._
import com.twitter.finagle.client.Transporter
import com.twitter.finagle.context.RemoteInfo
import com.twitter.finagle.context.RemoteInfo.Upstream
import com.twitter.finagle.thrift.ClientId
import com.twitter.finagle.tracing.Trace
import com.twitter.util.Future

private[finagle] object ExceptionRemoteInfoFactory {
  val role = Stack.Role("ExceptionRemoteInfo")

  def addRemoteInfo[T](endpointAddr: SocketAddress, label: String): PartialFunction[Throwable, Future[T]] = {
    case e: HasRemoteInfo =>
      e.setRemoteInfo(RemoteInfo.Available(
        Upstream.addr, ClientId.current, Some(endpointAddr), Some(ClientId(label)), Trace.id))
      Future.exception(e)
    case f: Failure =>
      Future.exception(f.withSource(Failure.Source.RemoteInfo, RemoteInfo.Available(
        Upstream.addr, ClientId.current, Some(endpointAddr), Some(ClientId(label)), Trace.id)))
  }

  
private[finagle] class ExceptionRemoteInfoFactory[Req, Rep](
    underlying: ServiceFactory[Req, Rep],
    endpointAddr: SocketAddress,
    label: String)
  extends ServiceFactoryProxy[Req, Rep](underlying)
{
  private[this] val requestAddRemoteInfo: PartialFunction[Throwable, Future[Rep]] =
    ExceptionRemoteInfoFactory.addRemoteInfo(endpointAddr, label)

  private[this] val connectionAddRemoteInfo: PartialFunction[Throwable, Future[Service[Req,Rep]]] =
    ExceptionRemoteInfoFactory.addRemoteInfo(endpointAddr, label)

  override def apply(conn: ClientConnection): Future[Service[Req, Rep]] =
    underlying(conn).map { service =>
      val filter = new SimpleFilter[Req, Rep] {
        override def apply(request: Req, service: Service[Req, Rep]): Future[Rep] =
          service(request).rescue(requestAddRemoteInfo)
      }
      filter andThen service
    }.rescue(connectionAddRemoteInfo)

} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:49,代码来源:ExceptionRemoteInfoFactory.scala

示例10: NameTest

//设置package包名称以及导入依赖的类
package com.twitter.finagle

import com.twitter.util.{Witness, Var}
import java.net.{InetSocketAddress, SocketAddress}
import org.junit.runner.RunWith
import org.scalatest.FunSuite
import org.scalatest.junit.JUnitRunner

@RunWith(classOf[JUnitRunner])
class NameTest extends FunSuite {
  test("Name.fromGroup") {
    val g = Group.mutable[SocketAddress]()
    val n = Name.fromGroup(g)

    var addr: Addr = Addr.Pending
    n.addr.changes.register(Witness({ addr = _ }))
    assert(addr == Addr.Pending)
    val set = Set[SocketAddress](new InetSocketAddress(0), new InetSocketAddress(1))
    g() = set

    val Addr.Bound(s2, r) = addr
    assert(s2.collect { case Address.Inet(ia, _) => ia } == set)
    assert(r.isEmpty)
    
    g() = Set(new SocketAddress {})
    val Addr.Failed(e) = addr
    assert(e.isInstanceOf[IllegalArgumentException])
  }

  test("Name.Bound maintains equality as per 'id'") {
    val id1, id2 = new {}
    val a1, a2 = Var(Addr.Pending)

    assert(Name.Bound(a1, id1) == Name.Bound(a2, id1))
    assert(Name.Bound(a1, id1) != Name.Bound(a1, id2))

    // It sucks that this is not symmetric, oh well.
    assert(Name.Bound(a1, id1) == id1)
    assert(Name.Bound(a1, id1) != id2)
  }

  test("Name.all maintains equality") {
    val names = Seq.fill(10) { Name.Bound.singleton(Var(Addr.Pending)) }.toSet

    assert(Name.all(names) == Name.all(names))
    assert(Name.all(names) != Name.all(names drop 1))
  }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:49,代码来源:NameTest.scala

示例11: PriorKnowledgeTransporter

//设置package包名称以及导入依赖的类
package com.twitter.finagle.http2.transport

import com.twitter.cache.FutureCache
import com.twitter.finagle.client.Transporter
import com.twitter.finagle.http2.Http2Transporter
import com.twitter.finagle.http2.transport.Http2ClientDowngrader.StreamMessage
import com.twitter.finagle.transport.Transport
import com.twitter.util.Future
import java.net.SocketAddress
import java.util.concurrent.ConcurrentHashMap


private[http2] class PriorKnowledgeTransporter(
    underlying: Transporter[Any, Any])
  extends Transporter[Any, Any] {

  private[this] val cache = new ConcurrentHashMap[SocketAddress, Future[MultiplexedTransporter]]()

  private[this] val fn: SocketAddress => Future[MultiplexedTransporter] = { addr: SocketAddress =>
    underlying(addr).map { transport =>
      val multi = new MultiplexedTransporter(
        Transport.cast[StreamMessage, StreamMessage](transport),
        addr
      )
      multi.onClose.ensure {
        cache.remove(addr, multi)
      }
      multi
    }
  }

  private[this] val cachedFn = FutureCache.fromMap(fn, cache)

  def apply(addr: SocketAddress): Future[Transport[Any, Any]] =
    cachedFn(addr).map { multi => Http2Transporter.unsafeCast(multi()) }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:37,代码来源:PriorKnowledgeTransporter.scala

示例12: read

//设置package包名称以及导入依赖的类
package com.twitter.finagle.http.exp

import com.twitter.finagle.Status
import com.twitter.finagle.transport.Transport
import com.twitter.util.{Future, Time}
import java.net.SocketAddress
import java.security.cert.Certificate


  def read(): Future[Multi[Out]]
}

private[finagle] abstract class StreamTransportProxy[In, Out](self: Transport[_, _])
  extends StreamTransport[In, Out] {

  def status: Status = self.status
  val onClose: Future[Throwable] = self.onClose
  def localAddress: SocketAddress = self.localAddress
  def remoteAddress: SocketAddress = self.remoteAddress
  def close(deadline: Time): Future[Unit] = self.close(deadline)
  def peerCertificate: Option[Certificate] = self.peerCertificate
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:23,代码来源:StreamTransport.scala

示例13: applyToCodec

//设置package包名称以及导入依赖的类
package com.twitter.finagle.http

import com.twitter.finagle.http.param._
import com.twitter.finagle.client.Transporter
import com.twitter.finagle.http.{Http => HttpCodec}
import com.twitter.finagle.netty3.{Netty3Listener, Netty3Transporter}
import com.twitter.finagle.param.{Label, Stats}
import com.twitter.finagle.server.Listener
import com.twitter.finagle.{ServerCodecConfig, Stack, ClientCodecConfig}
import java.net.SocketAddress
import org.jboss.netty.channel.Channel

package object netty {
  private[this] def applyToCodec(params: Stack.Params, codec: HttpCodec): HttpCodec =
    codec
      .maxRequestSize(params[MaxRequestSize].size)
      .maxResponseSize(params[MaxResponseSize].size)
      .streaming(params[Streaming].enabled)
      .decompressionEnabled(params[Decompression].enabled)
      .compressionLevel(params[CompressionLevel].level)
      .maxInitialLineLength(params[MaxInitialLineSize].size)
      .maxHeaderSize(params[MaxHeaderSize].size)


  private[finagle] val Netty3HttpTransporter: Stack.Params => Transporter[Any, Any] = { params =>
      val Label(label) = params[Label]
      val codec = applyToCodec(params, Http())
        .client(ClientCodecConfig(label))
      val Stats(stats) = params[Stats]
      val newTransport = (ch: Channel) => codec.newClientTransport(ch, stats)
      Netty3Transporter(
        codec.pipelineFactory,
        params + Netty3Transporter.TransportFactory(newTransport))
    }

  private[finagle] val Netty3HttpListener: Stack.Params => Listener[Any, Any] = { params =>
    val Label(label) = params[Label]
    val httpPipeline =
      applyToCodec(params, HttpCodec())
        .server(ServerCodecConfig(label, new SocketAddress{}))
        .pipelineFactory

    Netty3Listener(httpPipeline, params)
  }
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:46,代码来源:package.scala

示例14: ServerTransport

//设置package包名称以及导入依赖的类
package com.twitter.finagle.memcached.protocol.text.server

import com.twitter.finagle.Status
import com.twitter.finagle.memcached.protocol.text.{ResponseToEncoding, Decoding, Encoder}
import com.twitter.finagle.memcached.protocol.{Response, Command}
import com.twitter.finagle.memcached.protocol.StorageCommand.StorageCommands
import com.twitter.finagle.transport.Transport
import com.twitter.io.Buf
import com.twitter.util.{Time, Future}
import java.net.SocketAddress
import java.security.cert.Certificate


private[finagle] class ServerTransport(
    underlying: Transport[Buf, Buf]
) extends Transport[Response, Command] {

  private[this] val encoder = new Encoder
  private[this] val decoder = new ServerDecoder(StorageCommands)
  private[this] val responseToEncoding = new ResponseToEncoding
  private[this] val decodingToCommand = new DecodingToCommand

  // Decoding must be in a read loop because read() must return a response,
  // but we may get only get a partial message from the transport,
  // necessitating a further read.
  private[this] val decode: Buf => Future[Command] = buf => {
    val decoding: Decoding = decoder.decode(buf)
    if (decoding != null) {
      Future.value(decodingToCommand.decode(null, null, decoding))
    } else {
      readLoop()
    }
  }

  private[this] def readLoop(): Future[Command] = underlying.read().flatMap(decode)

  def read(): Future[Command] = readLoop()

  def write(response: Response): Future[Unit] = {
    val decoding: Decoding = responseToEncoding.encode(null, null, response)
    val buf: Buf = encoder.encode(null, null, decoding)
    underlying.write(buf)
  }

  def remoteAddress: SocketAddress = underlying.remoteAddress

  def peerCertificate: Option[Certificate] = underlying.peerCertificate

  def onClose: Future[Throwable] = underlying.onClose

  def localAddress: SocketAddress = underlying.localAddress

  def status: Status = underlying.status

  def close(deadline: Time): Future[Unit] = underlying.close(deadline)
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:57,代码来源:ServerTransport.scala

示例15: ClientTransport

//设置package包名称以及导入依赖的类
package com.twitter.finagle.memcached.protocol.text.client

import com.twitter.finagle.Status
import com.twitter.finagle.memcached.protocol.text._
import com.twitter.finagle.transport.Transport
import com.twitter.io.Buf
import com.twitter.util.{Time, Future}
import java.net.SocketAddress
import java.security.cert.Certificate


private[finagle] class ClientTransport[Command <: AnyRef, Response <: AnyRef](
    commandToEncoding: AbstractCommandToEncoding[Command],
    decodingToResponse: AbstractDecodingToResponse[Response],
    underlying: Transport[Buf, Buf])
  extends Transport[Command, Response] {

  private[this] val decoder = new ClientDecoder
  private[this] val encoder = new Encoder

  // Decoding must be in a read loop because read() must return a response,
  // but we may get only get a partial message from the transport,
  // necessitating a further read.
  private[this] val decode: Buf => Future[Response] = buf => {
    val decoding: Decoding = decoder.decode(buf)
    if (decoding != null) {
      Future.value(decodingToResponse.decode(decoding))
    } else {
      readLoop()
    }
  }

  private[this] def readLoop(): Future[Response] = underlying.read().flatMap(decode)

  def read(): Future[Response] = readLoop()

  def write(command: Command): Future[Unit] = {
    val decoding: Decoding = commandToEncoding.encode(command)
    val buf: Buf = encoder.encode(null, null, decoding)
    underlying.write(buf)
  }

  def remoteAddress: SocketAddress = underlying.remoteAddress

  def peerCertificate: Option[Certificate] = underlying.peerCertificate

  def onClose: Future[Throwable] = underlying.onClose

  def localAddress: SocketAddress = underlying.localAddress

  def status: Status = underlying.status

  def close(deadline: Time): Future[Unit] = underlying.close(deadline)
} 
开发者ID:wenkeyang,项目名称:finagle,代码行数:55,代码来源:ClientTransport.scala


注:本文中的java.net.SocketAddress类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。