1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
#!/usr/bin/env ruby
$: << File.expand_path('../../../lib', __FILE__)
require 'concurrent-edge'
Channel = Concurrent::Channel
## Go by Example: Channel Direction
# https://gobyexample.com/channel-directions
# we can't force a channel to go only one direction w/i a function
# but we can replicate the actual functionality from the example
def ping(pings, msg)
pings << msg
end
def pong(pings, pongs)
msg = ~pings
pongs << msg
end
pings = Channel.new(capacity: 1) # buffered
pongs = Channel.new(capacity: 1) # buffered
ping(pings, 'passed message')
pong(pings, pongs)
puts ~pongs
__END__
passed message
|