HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/doc/ruby-concurrent/examples/go-by-example-channels/channel-directions.rb
#!/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