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

widebase.stream.socket.cq.Server.scala Maven / Gradle / Ivy

There is a newer version: 0.3.3
Show newest version
package widebase.stream.socket.cq

import org.jboss.netty.channel.group. {

  ChannelGroupFuture,
  ChannelGroupFutureListener

}

import scala.collection.mutable.LinkedHashMap
import scala.concurrent.Lock

import widebase.stream.codec. { LengthDecoder, LengthEncoder }
import widebase.stream.codec.cq. { RequestDecoder, ResponseEncoder }
import widebase.stream.handler. { AuthHandler, AuthMap, ControlHandler }

import widebase.stream.handler.cq. {

  BlockLock,
  CountLock,
  QueryHandler,
  ServerHandler,
  TableMap

}

import widebase.stream.socket.ServerLike

/** A server.
 *
 * @param a authorization map
 *
 * @author myst3r10n
 */
class Server(a: AuthMap) extends ServerLike {

  auths = a

  /** Cache. */
  var cache: TableMap = _

  /** Lock objects against read. */
  var readLock: CountLock = _

  /** Lock objects against write. */
  var writeLock: BlockLock = _

  pipeline += "lengthDecoder" -> new LengthDecoder
  pipeline += "requestDecoder" -> new RequestDecoder
  pipeline += "lengthEncoder" -> new LengthEncoder
  pipeline += "responseEncoder" -> new ResponseEncoder

  override def await = {

    super.await
    this

  }

  override def bind(implicit port: Int = this.port) = {

    if(cache == null)
      cache = new TableMap

    readLock = new CountLock
    writeLock = new BlockLock

    pipeline += "authHandler" -> new AuthHandler(allChannels, auths)
    pipeline += "controlHandler" -> new ControlHandler(allChannels)
    pipeline += "serverHandler" -> new ServerHandler(cache, readLock, writeLock)
    pipeline += "queryHandler" -> new QueryHandler(cache, readLock, writeLock)

    super.bind(port)

    this

  }

  override def close = {

    super.close

    if(pipeline.contains("queryHandler"))
      pipeline -= "queryHandler"

    if(pipeline.contains("serverHandler"))
      pipeline -= "serverHandler"

    if(pipeline.contains("controlHandler"))
      pipeline -= "controlHandler"

    if(pipeline.contains("authHandler"))
      pipeline -= "authHandler"

    if(writeLock != null)
      writeLock.release

    this

  }

  override def filter(filter: String) = {

    super.filter(filter)
    this

  }

  override def load(filename: String) = {

    super.load(filename)
    this

  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy