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

com.mle.actor.Broadcaster.scala Maven / Gradle / Ivy

The newest version!
package com.mle.actor

import com.mle.util.Log
import java.util.concurrent.ScheduledFuture
import com.mle.util.Scheduling._
import com.mle.util.Implicits._
import com.mle.actor.Messages.{Broadcast, Start, Stop}
import akka.actor.{ActorRef, Actor}

/**
 * @author Mle
 */
class Broadcaster(king: ActorRef) extends Actor with Log {
  private var broadcastCount = 0
  private var broadcastTask: Option[ScheduledFuture[_]] = None

  def transformer: String => String = msg => msg

  private def newBroadcastTask = every(3 seconds) {
    broadcastCount += 1
    val msg = transformer("Broadcast nr: " + broadcastCount)
    log info msg
    king ! Broadcast(msg)
  }

  private def isBroadcasting = !broadcastTask.map(_.isDone).getOrElse(true)

  def receive = {
    case Start =>
      if (!isBroadcasting) {
        broadcastTask = Some(newBroadcastTask)
        log info "Started broadcast"
      }
    case Stop =>
      broadcastTask.foreach(_.cancel(true))
      log info "Stopped broadcast"
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy