Sha256: 91bf8218dd0a50185772e3318bed7a387fbe5846b5ad3164e4bd0078653e210c

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'args_parser'
$:.unshift File.expand_path '../lib', File.dirname(__FILE__)
require 'babascript'

args = ArgsParser.parse ARGV do
  arg :base, "Linda-Base URL", :default => BabaScript::DEFAULTS[:base]
  arg :space, "Linda-Space Name", :default => BabaScript::DEFAULTS[:space]
  arg :version, "show version", :alias => :v
  arg :help, "show help", :alias => :h

  validate :base, "invalid URL" do |v|
    v =~ /^https?:\/\/.+$/
  end
end

binname = File.basename(__FILE__)
if args.has_option? :help
  STDERR.puts "BabaScript VM  v#{BabaScript::VERSION}"
  STDERR.puts args.help
  exit 1
end

if args.has_option? :version
  STDERR.puts "BabaScript VM v#{BabaScript::VERSION} - ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
  exit 1
end

STDERR.puts "(connecting to #{args[:base]}/#{args[:space]})"

EM::run do
  linda = EM::RocketIO::Linda::Client.new args[:base]
  ts = linda.tuplespace[ args[:space] ]

  def take_task_and_run(ts)
    ts.take [:babascript, :eval] do |tuple, info|
      loop do
        print %Q{#{tuple[2]}(#{tuple[3].join(', ')}) >}
        line = STDIN.gets.strip
        next if line.empty?
        ts.write [:babascript, :return, tuple[4]["callback"], line]
        break
      end
      take_task_and_run(ts)
    end
  end

  linda.io.on :connect do
    STDERR.puts "(#{type} connect! You are now BABA.)"
    take_task_and_run(ts)
  end

  linda.io.on :disconnect do
    STDERR.puts "(#{type} closed)"
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
babascript-0.3.1 bin/baba-vm