snipplrCallback({"id":28364,"title":"jruby-jetlang-pingpong-example","source":"
  1. require<\/span> "java"<\/span><\/div><\/li>
  2. require<\/span> "jetlang-0.2.0.jar"<\/span><\/div><\/li>
  3.  <\/div><\/li>
  4. include_class "org.jetlang.fibers.ThreadFiber"<\/span><\/div><\/li>
  5. include_class "org.jetlang.channels.MemoryChannel"<\/span><\/div><\/li>
  6. include_class "org.jetlang.channels.BatchSubscriber"<\/span><\/div><\/li>
  7. include_class "java.util.concurrent.CountDownLatch"<\/span><\/div><\/li>
  8. include_class "java.util.concurrent.TimeUnit"<\/span><\/div><\/li>
  9.  <\/div><\/li>
  10. class<\/span> PingPongChannels<\/div><\/li>
  11. def<\/span> ping<\/div><\/li>
  12. return<\/span> @ping_channel<\/span> ||<\/span>= MemoryChannel.new<\/span><\/div><\/li>
  13. end<\/span><\/div><\/li>
  14. def<\/span> pong<\/div><\/li>
  15. return<\/span> @pong_channel<\/span> ||<\/span>= MemoryChannel.new<\/span><\/div><\/li>
  16. end<\/span><\/div><\/li>
  17. def<\/span> stop<\/div><\/li>
  18. return<\/span> @stop_channel<\/span> ||<\/span>= MemoryChannel.new<\/span><\/div><\/li>
  19. end<\/span><\/div><\/li>
  20. end<\/span><\/div><\/li>
  21.  <\/div><\/li>
  22. class<\/span> Ping<\/div><\/li>
  23. def<\/span> initialize(<\/span>channels, fiber, count)<\/span><\/div><\/li>
  24. @channels<\/span> = channels<\/div><\/li>
  25. @consumer<\/span> = fiber<\/div><\/li>
  26. @count<\/span> = count<\/div><\/li>
  27. end<\/span><\/div><\/li>
  28. def<\/span> start<\/div><\/li>
  29. on_receive = Proc<\/span>.new<\/span> do<\/span> |<\/span>message|<\/span><\/div><\/li>
  30. if<\/span> @count<\/span> ><\/span> 0<\/span><\/div><\/li>
  31. publish_ping(<\/span>message)<\/span><\/div><\/li>
  32. else<\/span><\/div><\/li>
  33. @channels<\/span>.stop<\/span>.publish<\/span>(<\/span>""<\/span>)<\/span><\/div><\/li>
  34. @consumer<\/span>.dispose<\/span><\/div><\/li>
  35. end<\/span><\/div><\/li>
  36. end<\/span><\/div><\/li>
  37. @channels<\/span>.ping<\/span>.subscribe<\/span>(<\/span>@consumer, on_receive)<\/span><\/div><\/li>
  38.  <\/div><\/li>
  39. @consumer<\/span>.start<\/span><\/div><\/li>
  40. end<\/span><\/div><\/li>
  41. def<\/span> publish_ping(<\/span>message)<\/span><\/div><\/li>
  42. puts<\/span> message<\/div><\/li>
  43. @count<\/span> -<\/span>= 1<\/span><\/div><\/li>
  44. @channels<\/span>.pong<\/span>.publish<\/span>(<\/span>"From ping to pong"<\/span>)<\/span><\/div><\/li>
  45. end<\/span><\/div><\/li>
  46. end<\/span><\/div><\/li>
  47.  <\/div><\/li>
  48. class<\/span> Pong<\/div><\/li>
  49. def<\/span> initialize(<\/span>channels, fiber)<\/span><\/div><\/li>
  50. @channels<\/span> = channels<\/div><\/li>
  51. @consumer<\/span> = fiber<\/div><\/li>
  52. end<\/span><\/div><\/li>
  53. def<\/span> start<\/div><\/li>
  54. on_receive = Proc<\/span>.new<\/span> do<\/span> |<\/span>message|<\/span><\/div><\/li>
  55. puts<\/span> message<\/div><\/li>
  56. @channels<\/span>.ping<\/span>.publish<\/span>(<\/span>"From pong to ping"<\/span>)<\/span><\/div><\/li>
  57. end<\/span><\/div><\/li>
  58. @channels<\/span>.pong<\/span>.subscribe<\/span>(<\/span>@consumer, on_receive)<\/span><\/div><\/li>
  59. on_stop = Proc<\/span>.new<\/span> {<\/span>|<\/span>message|<\/span> @consumer<\/span>.dispose<\/span>}<\/span><\/div><\/li>
  60. @channels<\/span>.stop<\/span>.subscribe<\/span>(<\/span>@consumer, on_stop)<\/span><\/div><\/li>
  61. @consumer<\/span>.start<\/span><\/div><\/li>
  62. end<\/span><\/div><\/li>
  63. end<\/span><\/div><\/li>
  64.  <\/div><\/li>
  65. channels = PingPongChannels.new<\/span><\/div><\/li>
  66. ping_thread = ThreadFiber.new<\/span><\/div><\/li>
  67. pong_thread = ThreadFiber.new<\/span><\/div><\/li>
  68.  <\/div><\/li>
  69. ping = Ping.new<\/span>(<\/span>channels, ping_thread, 1000<\/span>)<\/span><\/div><\/li>
  70. pong = Pong.new<\/span>(<\/span>channels, pong_thread)<\/span><\/div><\/li>
  71.  <\/div><\/li>
  72. pong.start<\/span><\/div><\/li>
  73. ping.start<\/span><\/div><\/li>
  74.  <\/div><\/li>
  75. channels.ping<\/span>.publish<\/span>(<\/span>"Start Game"<\/span>)<\/span><\/div><\/li>
  76.  <\/div><\/li>
  77. ping_thread.join<\/span><\/div><\/li>
  78. pong_thread.join<\/span><\/div><\/li><\/ol><\/pre>","link":"https:\/\/snipplr.com\/view\/28364\/jruby-jetlang-pingpong-example"});