Return to Snippet

Revision: 23871
at February 16, 2010 05:19 by sai-venkat


Updated Code
require "java"
require "jetlang-0.2.0.jar"

include_class "org.jetlang.fibers.ThreadFiber"
include_class "org.jetlang.channels.MemoryChannel"
include_class "org.jetlang.channels.BatchSubscriber"
include_class "java.util.concurrent.CountDownLatch"
include_class "java.util.concurrent.TimeUnit"

class PingPongChannels
  def ping
     return @ping_channel ||= MemoryChannel.new
  end
  def pong
    return @pong_channel ||= MemoryChannel.new
  end
  def stop
    return @stop_channel ||= MemoryChannel.new
  end
end

class Ping
    def initialize(channels, fiber, count)
      @channels = channels
      @consumer = fiber
      @count = count
    end
    def start
      on_receive = Proc.new do |message|
        if @count > 0
          publish_ping(message)
        else
          @channels.stop.publish("")
          @consumer.dispose
        end
      end
      @channels.ping.subscribe(@consumer, on_receive)

      @consumer.start
    end
    def publish_ping(message)
      puts message
      @count -= 1
      @channels.pong.publish("From ping to pong")
    end
end

class Pong
  def initialize(channels, fiber)
    @channels = channels
    @consumer = fiber
  end
  def start
    on_receive = Proc.new do |message|
      puts message
      @channels.ping.publish("From pong to ping")
    end
    @channels.pong.subscribe(@consumer, on_receive)
    on_stop = Proc.new {|message| @consumer.dispose}
    @channels.stop.subscribe(@consumer, on_stop)
    @consumer.start
  end
end

channels = PingPongChannels.new
ping_thread = ThreadFiber.new
pong_thread = ThreadFiber.new

ping = Ping.new(channels, ping_thread, 1000)
pong = Pong.new(channels, pong_thread)

pong.start
ping.start

channels.ping.publish("Start Game")

ping_thread.join
pong_thread.join

Revision: 23870
at February 16, 2010 05:18 by sai-venkat


Initial Code
require "java"
require "../deps/jetlang-0.2.0.jar"

include_class "org.jetlang.fibers.ThreadFiber"
include_class "org.jetlang.channels.MemoryChannel"
include_class "org.jetlang.channels.BatchSubscriber"
include_class "java.util.concurrent.CountDownLatch"
include_class "java.util.concurrent.TimeUnit"

class PingPongChannels
  def ping
     return @ping_channel ||= MemoryChannel.new
  end
  def pong
    return @pong_channel ||= MemoryChannel.new
  end
  def stop
    return @stop_channel ||= MemoryChannel.new
  end
end

class Ping
    def initialize(channels, fiber, count)
      @channels = channels
      @consumer = fiber
      @count = count
    end
    def start
      on_receive = Proc.new do |message|
        if @count > 0
          publish_ping(message)
        else
          @channels.stop.publish("")
          @consumer.dispose
        end
      end
      @channels.ping.subscribe(@consumer, on_receive)

      @consumer.start
    end
    def publish_ping(message)
      puts message
      @count -= 1
      @channels.pong.publish("From ping to pong")
    end
end

class Pong
  def initialize(channels, fiber)
    @channels = channels
    @consumer = fiber
  end
  def start
    on_receive = Proc.new do |message|
      puts message
      @channels.ping.publish("From pong to ping")
    end
    @channels.pong.subscribe(@consumer, on_receive)
    on_stop = Proc.new {|message| @consumer.dispose}
    @channels.stop.subscribe(@consumer, on_stop)
    @consumer.start
  end
end

channels = PingPongChannels.new
ping_thread = ThreadFiber.new
pong_thread = ThreadFiber.new

ping = Ping.new(channels, ping_thread, 1000)
pong = Pong.new(channels, pong_thread)

pong.start
ping.start

channels.ping.publish("Start Game")

ping_thread.join
pong_thread.join

Initial URL


Initial Description


Initial Title
JRuby Jetlang Pingpong Example

Initial Tags


Initial Language
Ruby