Sha256: 8c79ac6b65cad6d93e9d317c83c76024da19532115ef9fadb1169a34265e831d

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

require 'kipatra/cipango'

module Kipatra
  class Server
    include Cipango

    def initialize(opts)
      @war, @app_file, @sipatra, @tcp, @udp = opts[:war], opts[:app_file], opts[:sipatra], opts[:tcp], opts[:udp]
      # useless
      unless @war || @app_file
        raise ArgumentError, "Either :war or :app_file must be defined"
      end
    end

    def start
      @server = Cipango::Server.new

      @server.connector_manager.connectors = manage_connectors

      handler = SipContextHandlerCollection.new
      handler.add_handler sip_app

      @server.application_router = DefaultApplicationRouter.new
      @server.handler = handler

      @server.start
    end

    def join
      @server.join
    end

    private

    def manage_connectors
      conns = []

      @udp.each do |args|
        conn = UdpConnector.new
        conn.host, conn.port = args[:host], args[:port]
        conns << conn
      end

      @tcp.each do |args|
        conn = TcpConnector.new
        conn.host, conn.port = args[:host], args[:port]
        conns << conn
      end

      conns
    end

    def sip_app
      ctxt = nil
      if @war
        ctxt = SipAppContext.new
        ctxt.context_path = '/'
        ctxt.war = @war
      elsif @sipatra
        ctxt = SipAppContext.new('/', '/')
        proc = Proc.new {}
        servlet = eval(File.read(File.expand_path(File.join(File.dirname(__FILE__), '../lib/sipatra_app.rb'))), proc.binding, 'lib/sipatra_app.rb')
        ctxt.add_sip_servlet SipServletHolder::new(servlet)
      else
        ctxt = SipAppContext.new('/', '/')
        proc = Proc.new {}
        servlet = eval(File.read(@app_file), proc.binding, @app_file)
        ctxt.add_sip_servlet SipServletHolder::new(servlet)
      end

      ctxt
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kipatra-0.1.1 lib/kipatra.rb