# 2009/10/29 class Mathematica require 'Wolfram.NETLink' include Wolfram::NETLink PAR="-linkmode launch -linkname 'C:\\Program Files\\Wolfram Research\\Mathematica Player\\7.0\\MathKernel.exe'" def initialize() end def open @kernelLink=MathLinkFactory.CreateKernelLink(PAR) @kernelLink.WaitAndDiscardAnswer() end def do(q) @kernelLink.EvaluateToInputForm(q, 0) end def close @kernelLink.EvaluateToInputForm('MVClose[]', 0) end end class Mathnode require 'webrick' include WEBrick require 'net/http' require 'uri' Net::HTTP.version_1_2 attr_reader :server def initialize() @m=Mathematica.new @m.open end def start(port) @server=Thread.new do @s=HTTPServer.new(:Port=>port, :RequestTimeout=>600, :DocumentRoot=>'', :MaxClients=>1) @s.mount_proc("/restart") {@m.close;@m.open} @s.mount_proc("/shutdown") {@s.shutdown} @s.mount_proc("/evaluate"){|req,res| res.body=URI.encode(@m.do(URI.decode(req.query['q']) )) if req.query['q'] } @s.mount_proc("/"){|req,res| # --- for UI ---- res.body=<hirax.net::alpha

hirax.net::alpha

HTML } trap("INT"){@m.close;@s.shutdown} @s.start end end def stop @server.shutdown end def sendCommand(host,port,q) result='' Net::HTTP.start(host,port){ |http| r=http.get('/evaluate?q='+URI.encode(q)) result=URI.decode( r.body ) } result end end