All Downloads are FREE. Search and download functionalities are using the official Maven repository.

readwriteactor.ReadWriteActorState.scala Maven / Gradle / Ivy

The newest version!
package readwriteactor

import akka.actor.Actor
import readwriteactor.ReadWriteActorState.{ReadMsg, WriteMsg, WriteReadMsg}
import readwriteactor.Types.{Read, Write, WriteRead}

import scala.concurrent.Promise

class ReadWriteActorState[S](var state: S) extends Actor {

  override def receive: Receive = {
    case writeMsg: WriteMsg[S] =>
      state = writeMsg.write(state)
      writeMsg.newStatePromise.success(state)

    case writeReadMsg: WriteReadMsg[S, Any] =>
      writeReadMsg.writeRead(state) match {
        case (newState, returnValue) =>
          state = newState
          writeReadMsg.readPromise.success(returnValue)
      }

    case readMsg: ReadMsg[S, Any] =>
      val value = readMsg.read(state)
      readMsg.readPromise.success(value)
  }
}

object ReadWriteActorState {
  case class WriteMsg[S](write: Write[S], newStatePromise: Promise[S])
  case class WriteReadMsg[S, R](writeRead: WriteRead[S, R], readPromise: Promise[R])
  case class ReadMsg[S, U](read: Read[S, U], readPromise: Promise[U])
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy