tutorial - ask akka scala




Come convertire Akka ByteString in stringa? (2)

Mi dispiace se questa è una domanda stupida, ma onestamente non riesco a capirlo senza impostare un qualche tipo di codice ASCII -> mappatore di caratteri me stesso, che non penso sia il modo giusto per farlo.

Quindi attualmente sto facendo una "applicazione di chat" con Scala e Akka dove uso un'entità client e server separata. Il client si connette al server, invia un messaggio e il server fa qualcosa con esso.

Ho ricevuto l'invio di un messaggio funzionante, ma ora sono bloccato a leggere il messaggio sul lato server. Ogni volta che ricevo un messaggio ottengo un ByteString contenente i valori ASCII dei caratteri del messaggio. Come posso convertire questo ByteString in una stringa effettiva?

Codice rilevante (lato server):

package chatapp.server

import java.net.InetSocketAddress

import akka.actor.{Actor, ActorSystem}
import akka.io.Tcp._
import akka.io.{IO, Tcp}

/**
  * Created by Niels Bokmans on 30-3-2016.
  */
class ServerActor(actorSystem: ActorSystem) extends Actor {
  val Port = 18573
  val Server = "localhost"

  IO(Tcp)(actorSystem) ! Bind(self, new InetSocketAddress("localhost", Port))

  def receive: Receive = {

    case CommandFailed(_: Bind) =>
      println("Failed to start listening on " + Server + ":" + Port)
      context stop self
      actorSystem.terminate()

    case Bound(localAddress: InetSocketAddress) =>
      println("Started listening on " + localAddress)

    case Connected(remote, local) =>
      println("New connection!")
      sender ! Register(self)
    case Received(data) =>
      println(data)
  }
}

Immagine del server (come puoi vedere accetta connessioni -> riceve una nuova connessione -> riceve un messaggio dalla connessione):

Immagine del client (si connette al server e quindi invia il messaggio "testmessage")


Puoi usare il metodo decodeString questo modo:

scala> val x = ByteString("abcd")
x: akka.util.ByteString = ByteString(97, 98, 99, 100)

scala> x.decodeString("US-ASCII")
res0: String = abcd







akka