Changeset 264:31ad17f72637

Show
Ignore:
Timestamp:
04/30/2010 01:01:58 PM (4 months ago)
Author:
dcaoyuan
Branch:
default
Message:

Type paramter is not neccesary for ScalaActor?

Location:
blogbird/src/main/scala/org/aiotrade/httpd
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • blogbird/src/main/scala/org/aiotrade/httpd/ClientConnection.scala

    r262 r264  
    55import java.nio.channels.SocketChannel 
    66 
     7import org.aiotrade.httpd.SelectActor.Read 
     8import org.aiotrade.httpd.SelectActor.Write 
    79import scala.actors.Actor 
    810import Debugger._ 
     
    1113 * Represents an open HTTP connection coming from a client. 
    1214 */ 
    13 class ClientConnection(val channel: SocketChannel) extends Actor with WithSelectableChannel { 
     15class ClientConnection(val channel: SocketChannel) extends Actor with ChannelListener { 
    1416  private var _isOpen = true 
    1517  private var requestParser = new HttpRequestParser 
  • blogbird/src/main/scala/org/aiotrade/httpd/HttpdActors.scala

    r263 r264  
    6666  } 
    6767 
    68   object selectActor extends SelectActor[ClientConnection](SelectionKey.OP_READ) { 
     68  object selectActor extends SelectActor(SelectionKey.OP_READ) { 
    6969    def produce(o: Request) = ConnectionManager.produce(o) 
    7070  } 
     
    116116  } 
    117117 
    118   private object selectActor extends SelectActor[ClientConnection](SelectionKey.OP_WRITE) 
     118  private object selectActor extends SelectActor(SelectionKey.OP_WRITE) 
    119119 
    120120  protected def consume(reply: Reply) { 
  • blogbird/src/main/scala/org/aiotrade/httpd/SelectActor.scala

    r263 r264  
    99import scala.collection.JavaConversions._ 
    1010 
    11 abstract class SelectionEvent[T <: WithSelectableChannel](sender: SelectActor[T]) 
    12 case class Read   [T <: WithSelectableChannel](sender: SelectActor[T]) extends SelectionEvent(sender) 
    13 case class Write  [T <: WithSelectableChannel](sender: SelectActor[T]) extends SelectionEvent(sender) 
    14 case class Unknown[T <: WithSelectableChannel](sender: SelectActor[T]) extends SelectionEvent(sender) 
    1511 
    16 abstract class SelectActor[T <: WithSelectableChannel](ops: Int) extends Actor { 
     12object SelectActor { 
     13  abstract class Event(sender: SelectActor) 
     14  case class Read   (sender: SelectActor) extends Event(sender) 
     15  case class Write  (sender: SelectActor) extends Event(sender) 
     16  case class Unknown(sender: SelectActor) extends Event(sender) 
     17} 
     18 
     19import SelectActor._ 
     20abstract class SelectActor(ops: Int) extends Actor { 
    1721 
    1822  // @Note tried using ConcurrentMap here before, but no success 
    19   private val newListeners = new LinkedBlockingQueue[T] 
     23  private val newListeners = new LinkedBlockingQueue[ChannelListener] 
    2024 
    2125  private val selector: Selector = SelectorProvider.provider.openSelector 
    2226 
    23   def addListener(listener: T) { 
     27  def addListener(listener: ChannelListener) { 
    2428    newListeners put listener 
    2529    selector.wakeup 
     
    3943 
    4044      if (key.isValid) { 
    41         val listener = key.attachment.asInstanceOf[T] 
     45        val listener = key.attachment.asInstanceOf[ChannelListener] 
    4246        val event = 
    4347          if (key.isReadable) { 
     
    5660 
    5761    // Add queued up connections before looping back around: 
    58     val listeners = new java.util.Vector[T] 
     62    val listeners = new java.util.Vector[ChannelListener] 
    5963    newListeners.drainTo(listeners) 
    6064 
     
    6872} 
    6973 
    70 trait WithSelectableChannel extends Actor { 
     74trait ChannelListener extends Actor { 
    7175  def isOpen: Boolean 
    7276  def channel: SelectableChannel