blob: 2efe3e9a87487b5cff77064e3260cbf2dfd4897d (
plain) (
tree)
|
|
package com.github.jodersky.flow
package stream
package impl
import akka.actor._
import akka.util._
import akka.stream._
import akka.stream.stage._
import scala.concurrent._
/**
* Graph stage that establishes and thereby materializes a serial connection.
* The actual connection logic is deferred to [[SerialConnectionLogic]].
*/
private[stream] class SerialConnectionStage(
manager: ActorRef,
port: String,
settings: SerialSettings,
failOnOverflow: Boolean,
bufferSize: Int
) extends GraphStageWithMaterializedValue[FlowShape[ByteString, ByteString], Future[Serial.Connection]] {
val in: Inlet[ByteString] = Inlet("Serial.in")
val out: Outlet[ByteString] = Outlet("Serial.out")
val shape: FlowShape[ByteString, ByteString] = FlowShape(in, out)
override def createLogicAndMaterializedValue(inheritedAttributes: Attributes):
(GraphStageLogic, Future[Serial.Connection]) = {
val connectionPromise = Promise[Serial.Connection]
val logic = new SerialConnectionLogic(
shape,
manager,
port,
settings,
failOnOverflow,
bufferSize,
connectionPromise
)
(logic, connectionPromise.future)
}
override def toString = s"Serial($port)"
}
|