40 lines
1.0 KiB
Crystal
40 lines
1.0 KiB
Crystal
|
require "ipc"
|
||
|
|
||
|
ipc = IPC.new
|
||
|
ipc.timer 5000 # timer event every 5 seconds
|
||
|
fd = ipc.connect "pong" # 'pong' service
|
||
|
|
||
|
# Schedule a message to send to a particular file descriptor
|
||
|
ipc.schedule fd, "Hello this is me!"
|
||
|
|
||
|
ipc.loop do |event|
|
||
|
case event.type
|
||
|
when LibIPC::EventType::MessageRx
|
||
|
m = event.message
|
||
|
if m.nil?
|
||
|
puts "Err, should have received smth :("
|
||
|
exit 1
|
||
|
else
|
||
|
received = String.new(m.to_unsafe, m.size)
|
||
|
puts "msg received: #{received}"
|
||
|
if "Hello this is me!".compare(received) == 0
|
||
|
puts "All good! Goodbye!"
|
||
|
exit 0
|
||
|
end
|
||
|
puts "Received message isn't what was expected!"
|
||
|
exit 1
|
||
|
end
|
||
|
when LibIPC::EventType::MessageTx
|
||
|
puts "A message has been sent"
|
||
|
when LibIPC::EventType::Connection
|
||
|
puts "A client just connected #JOY"
|
||
|
when LibIPC::EventType::Disconnection
|
||
|
puts "A client just disconnected #SAD"
|
||
|
when LibIPC::EventType::Timer
|
||
|
STDOUT.write "\rTimer!".to_slice
|
||
|
else
|
||
|
puts "Unexpected: #{event.type}"
|
||
|
exit 1
|
||
|
end
|
||
|
end
|