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