summaryrefslogtreecommitdiff
path: root/sample/soap/calc
diff options
context:
space:
mode:
Diffstat (limited to 'sample/soap/calc')
-rw-r--r--sample/soap/calc/calc.rb17
-rw-r--r--sample/soap/calc/calc2.rb29
-rw-r--r--sample/soap/calc/client.rb26
-rw-r--r--sample/soap/calc/client2.rb29
-rw-r--r--sample/soap/calc/httpd.rb15
-rw-r--r--sample/soap/calc/server.cgi15
-rw-r--r--sample/soap/calc/server.rb17
-rw-r--r--sample/soap/calc/server2.rb20
8 files changed, 168 insertions, 0 deletions
diff --git a/sample/soap/calc/calc.rb b/sample/soap/calc/calc.rb
new file mode 100644
index 0000000000..6bc78803b3
--- /dev/null
+++ b/sample/soap/calc/calc.rb
@@ -0,0 +1,17 @@
+module CalcService
+ def self.add(lhs, rhs)
+ lhs + rhs
+ end
+
+ def self.sub(lhs, rhs)
+ lhs - rhs
+ end
+
+ def self.multi(lhs, rhs)
+ lhs * rhs
+ end
+
+ def self.div(lhs, rhs)
+ lhs / rhs
+ end
+end
diff --git a/sample/soap/calc/calc2.rb b/sample/soap/calc/calc2.rb
new file mode 100644
index 0000000000..e9cf6bbca7
--- /dev/null
+++ b/sample/soap/calc/calc2.rb
@@ -0,0 +1,29 @@
+class CalcService2
+ def initialize(value = 0)
+ @value = value
+ end
+
+ def set(value)
+ @value = value
+ end
+
+ def get
+ @value
+ end
+
+ def +(rhs)
+ @value + rhs
+ end
+
+ def -(rhs)
+ @value - rhs
+ end
+
+ def *(rhs)
+ @value * rhs
+ end
+
+ def /(rhs)
+ @value / rhs
+ end
+end
diff --git a/sample/soap/calc/client.rb b/sample/soap/calc/client.rb
new file mode 100644
index 0000000000..57a4c0ba5b
--- /dev/null
+++ b/sample/soap/calc/client.rb
@@ -0,0 +1,26 @@
+require 'soap/rpc/driver'
+
+server = ARGV.shift || 'http://localhost:7000/'
+# server = 'http://localhost:8808/server.cgi'
+
+calc = SOAP::RPC::Driver.new(server, 'http://tempuri.org/calcService')
+#calc.wiredump_dev = STDERR
+calc.add_method('add', 'lhs', 'rhs')
+calc.add_method('sub', 'lhs', 'rhs')
+calc.add_method('multi', 'lhs', 'rhs')
+calc.add_method('div', 'lhs', 'rhs')
+
+puts 'add: 1 + 2 # => 3'
+puts calc.add(1, 2)
+puts 'sub: 1.1 - 2.2 # => -1.1'
+puts calc.sub(1.1, 2.2)
+puts 'multi: 1.1 * 2.2 # => 2.42'
+puts calc.multi(1.1, 2.2)
+puts 'div: 5 / 2 # => 2'
+puts calc.div(5, 2)
+puts 'div: 5.0 / 2 # => 2.5'
+puts calc.div(5.0, 2)
+puts 'div: 1.1 / 0 # => Infinity'
+puts calc.div(1.1, 0)
+puts 'div: 1 / 0 # => ZeroDivisionError'
+puts calc.div(1, 0)
diff --git a/sample/soap/calc/client2.rb b/sample/soap/calc/client2.rb
new file mode 100644
index 0000000000..2c53f09d42
--- /dev/null
+++ b/sample/soap/calc/client2.rb
@@ -0,0 +1,29 @@
+require 'soap/rpc/driver'
+
+server = ARGV.shift || 'http://localhost:7000/'
+# server = 'http://localhost:8808/server2.cgi'
+
+var = SOAP::RPC::Driver.new( server, 'http://tempuri.org/calcService' )
+var.add_method( 'set', 'newValue' )
+var.add_method( 'get' )
+var.add_method_as( '+', 'add', 'rhs' )
+var.add_method_as( '-', 'sub', 'rhs' )
+var.add_method_as( '*', 'multi', 'rhs' )
+var.add_method_as( '/', 'div', 'rhs' )
+
+puts 'var.set( 1 )'
+puts '# Bare in mind that another client set another value to this service.'
+puts '# This is only a sample for proof of concept.'
+var.set( 1 )
+puts 'var + 2 # => 1 + 2 = 3'
+puts var + 2
+puts 'var - 2.2 # => 1 - 2.2 = -1.2'
+puts var - 2.2
+puts 'var * 2.2 # => 1 * 2.2 = 2.2'
+puts var * 2.2
+puts 'var / 2 # => 1 / 2 = 0'
+puts var / 2
+puts 'var / 2.0 # => 1 / 2.0 = 0.5'
+puts var / 2.0
+puts 'var / 0 # => 1 / 0 => ZeroDivisionError'
+puts var / 0
diff --git a/sample/soap/calc/httpd.rb b/sample/soap/calc/httpd.rb
new file mode 100644
index 0000000000..ee8ab09f50
--- /dev/null
+++ b/sample/soap/calc/httpd.rb
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+require 'webrick'
+require 'getopts'
+
+getopts "", 'r:', 'p:8808'
+
+s = WEBrick::HTTPServer.new(
+ :BindAddress => "0.0.0.0",
+ :Port => $OPT_p.to_i,
+ :DocumentRoot => $OPT_r || ".",
+ :CGIPathEnv => ENV['PATH']
+)
+trap(:INT){ s.shutdown }
+s.start
diff --git a/sample/soap/calc/server.cgi b/sample/soap/calc/server.cgi
new file mode 100644
index 0000000000..c4fa687550
--- /dev/null
+++ b/sample/soap/calc/server.cgi
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+require 'soap/rpc/cgistub'
+
+class CalcServer < SOAP::RPC::CGIStub
+ def initialize(*arg)
+ super
+
+ require 'calc'
+ servant = CalcService
+ add_servant(servant, 'http://tempuri.org/calcService')
+ end
+end
+
+status = CalcServer.new('CalcServer', nil).start
diff --git a/sample/soap/calc/server.rb b/sample/soap/calc/server.rb
new file mode 100644
index 0000000000..12a3968b5a
--- /dev/null
+++ b/sample/soap/calc/server.rb
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+require 'soap/rpc/standaloneServer'
+require 'calc'
+
+class CalcServer < SOAP::RPC::StandaloneServer
+ def initialize(*arg)
+ super
+
+ servant = CalcService
+ add_servant(servant, 'http://tempuri.org/calcService')
+ end
+end
+
+if $0 == __FILE__
+ status = CalcServer.new('CalcServer', nil, '0.0.0.0', 7000).start
+end
diff --git a/sample/soap/calc/server2.rb b/sample/soap/calc/server2.rb
new file mode 100644
index 0000000000..735721de64
--- /dev/null
+++ b/sample/soap/calc/server2.rb
@@ -0,0 +1,20 @@
+#!/usr/bin/env ruby
+
+require 'soap/rpc/standaloneServer'
+require 'calc2'
+
+class CalcServer2 < SOAP::RPC::StandaloneServer
+ def on_init
+ servant = CalcService2.new
+ add_method(servant, 'set', 'newValue')
+ add_method(servant, 'get')
+ add_method_as(servant, '+', 'add', 'lhs')
+ add_method_as(servant, '-', 'sub', 'lhs')
+ add_method_as(servant, '*', 'multi', 'lhs')
+ add_method_as(servant, '/', 'div', 'lhs')
+ end
+end
+
+if $0 == __FILE__
+ status = CalcServer2.new('CalcServer', 'http://tempuri.org/calcService', '0.0.0.0', 7000).start
+end