39 lines
1 KiB
Scala
39 lines
1 KiB
Scala
/**
|
|
* Copyright (C) 2009 Scalable Solutions.
|
|
*/
|
|
|
|
package se.scalablesolutions.akka.kernel.reactor
|
|
|
|
import java.util.concurrent.TimeUnit
|
|
import java.util.HashMap
|
|
|
|
trait MessageDispatcherBase extends MessageDispatcher {
|
|
val CONCURRENT_MODE = kernel.Kernel.config.getBool("akka.actor.concurrent-mode", false)
|
|
val MILLISECONDS = TimeUnit.MILLISECONDS
|
|
|
|
val messageQueue = new MessageQueue
|
|
|
|
@volatile protected var active: Boolean = false
|
|
protected val messageHandlers = new HashMap[AnyRef, MessageHandler]
|
|
protected var selectorThread: Thread = _
|
|
protected val guard = new Object
|
|
|
|
def registerHandler(key: AnyRef, handler: MessageHandler) = guard.synchronized {
|
|
messageHandlers.put(key, handler)
|
|
}
|
|
|
|
def unregisterHandler(key: AnyRef) = guard.synchronized {
|
|
messageHandlers.remove(key)
|
|
}
|
|
|
|
def shutdown = if (active) {
|
|
active = false
|
|
selectorThread.interrupt
|
|
doShutdown
|
|
}
|
|
|
|
/**
|
|
* Subclass callback. Override if additional shutdown behavior is needed.
|
|
*/
|
|
protected def doShutdown = {}
|
|
}
|