There is another thing that just came up: Can I receive data on the client 
with a above approach when there was no prior request?

I made a small code example:

import scala.concurrent.Future
import scala.util._

import akka.actor._
import akka.stream._, scaladsl._
import akka.util._

object Test extends App {

  def server(system: ActorSystem, address: String, port: Int): Unit = {
    implicit val sys = system
    import system.dispatcher
    implicit val materializer = ActorMaterializer()

    val flow = Flow[ByteString].map{bs ⇒
      println("server received: " + bs)
      bs
    }

    val handler = Sink.foreach[Tcp.IncomingConnection] { conn =>
      println("Client connected from: " + conn.remoteAddress)
      Future {
        Thread.sleep(2000)
        val a = Source.actorRef(1, 
OverflowStrategy.fail).via(conn.flow).to(Sink.foreach{x ⇒ println("server 
sink: " + x)}).run()
        println("sending notification")
        a ! ByteString("server test")
      }
      conn handleWith flow
    }

    val connections = Tcp().bind(address, port)
    val binding = connections.to(handler).run()

    binding.onComplete {
      case Success(b) =>
        println("Server started, listening on: " + b.localAddress)
      case Failure(e) =>
        println(s"Server could not bind to $address:$port: ${e.getMessage}")
    }
  }

  def client(system: ActorSystem, address: String, port: Int): Unit = {
    implicit val sys = system
    import system.dispatcher
    implicit val materializer = ActorMaterializer()

    val tcpFlow = Flow[ByteString].via(Tcp().outgoingConnection(address, 
port))
    val a = Source.actorRef(1, 
OverflowStrategy.fail).via(tcpFlow).to(Sink.foreach{x ⇒ println("client 
sink: " + x)}).run()
    a ! ByteString("client test")
  }

  val ser = ActorSystem("Server")
  server(ser, "127.0.0.1", 6666)

  val client = ActorSystem("Client")
  client(client, "127.0.0.1", 6666)
}

I would expect that the when the future is completed, the client receives a 
notification, but it does not happen. Instead I get a message in dead 
letters. Not sure why. Am I allowed to send to `conn.flow`, or do I have to 
do it differently?

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to