require 'rubygems'
require 'gems/gems/ministat-1.2.1/lib/ministat.rb'
require 'soap/rpc/standaloneServer'

begin
  class StatServer < SOAP::RPC::StandaloneServer

    def initialize(*args)
      super
      add_method(self, 'mean2', 'a', 'b')
      add_method(self, 'mean3', 'a', 'b', 'c')
      add_method(self, 'mean4', 'a', 'b', 'c', 'd')
      add_method(self, 'mean5', 'a', 'b', 'c', 'd', 'e')
      add_method(self, 'mean6', 'a', 'b', 'c', 'd', 'e', 'f')
      add_method(self, 'mean7', 'a', 'b', 'c', 'd', 'e', 'f', 'g')
      add_method(self, 'mean8', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
      add_method(self, 'mean9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')
      add_method(self, 'mean10', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j')
      add_method(self, 'mean11', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k')
      add_method(self, 'mean12', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l')

      add_method(self, 'std_dev2', 'a', 'b')
      add_method(self, 'std_dev3', 'a', 'b', 'c')
      add_method(self, 'std_dev4', 'a', 'b', 'c', 'd')
      add_method(self, 'std_dev5', 'a', 'b', 'c', 'd', 'e')
      add_method(self, 'std_dev6', 'a', 'b', 'c', 'd', 'e', 'f')
      add_method(self, 'std_dev7', 'a', 'b', 'c', 'd', 'e', 'f', 'g')
      add_method(self, 'std_dev8', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
      add_method(self, 'std_dev9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')
      add_method(self, 'std_dev10', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j')
      add_method(self, 'std_dev11', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k')
      add_method(self, 'std_dev12', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l')
    end

    # Handler methods
    def mean2(a, b)
      @dataIn = [a, b]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean3(a, b, c)
      @dataIn = [a, b, c]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean4(a, b, c, d)
      @dataIn = [a, b, c, d]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean5(a, b, c, d, e)
      @dataIn = [a, b, c, d, e]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean6(a, b, c, d, e, f)
      @dataIn = [a, b, c, d, e, f]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean7(a, b, c, d, e, f, g)
      @dataIn = [a, b, c, d, e, f, g]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean8(a, b, c, d, e, f, g, h)
      @dataIn = [a, b, c, d, e, f, g, h]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean9(a, b, c, d, e, f, g, h, i)
      @dataIn = [a, b, c, d, e, f, g, h, i]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean10(a, b, c, d, e, f, g, h, i, j)
      @dataIn = [a, b, c, d, e, f, g, h, i, j]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean11(a, b, c, d, e, f, g, h, i, j, k)
      @dataIn = [a, b, c, d, e, f, g, h, i, j, k]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def mean12(a, b, c, d, e, f, g, h, i, j, k, l)
      @dataIn = [a, b, c, d, e, f, g, h, i, j, k, l]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.mean
    end

    def std_dev2(a, b)
      @dataIn = [a, b]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev3(a, b, c)
      @dataIn = [a, b, c]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev4(a, b, c, d)
      @dataIn = [a, b, c, d]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev5(a, b, c, d, e)
      @dataIn = [a, b, c, d, e]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev6(a, b, c, d, e, f)
      @dataIn = [a, b, c, d, e, f]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev7(a, b, c, d, e, f, g)
      @dataIn = [a, b, c, d, e, f, g]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev8(a, b, c, d, e, f, g, h)
      @dataIn = [a, b, c, d, e, f, g, h]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev9(a, b, c, d, e, f, g, h, i)
      @dataIn = [a, b, c, d, e, f, g, h, i]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev10(a, b, c, d, e, f, g, h, i, j)
      @dataIn = [a, b, c, d, e, f, g, h, i, j]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev11(a, b, c, d, e, f, g, h, i, j, k)
      @dataIn = [a, b, c, d, e, f, g, h, i, j, k]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

    def std_dev12(a, b, c, d, e, f, g, h, i, j, k, l)
      @dataIn = [a, b, c, d, e, f, g, h, i, j, k, l]
      @ms1   = MiniStat::Data.new(@dataIn)
      return @ms1.std_dev
    end

  end

  server = StatServer.new('StatsServer', 'urn:ruby:stats', 'swruby.com', 8088)
  trap('INT') { 
    server.shutdown 
  }
  server.start
rescue => err
  puts err.message
end
