Revision: 23871
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        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
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        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