From f379c583ea90eaee7c908b118d1cae92ee3a7522 Mon Sep 17 00:00:00 2001 From: dblock Date: Sat, 29 Sep 2018 19:47:31 -0400 Subject: [PATCH] Replace Thread by Actor, undoing #224. --- lib/slack/real_time/concurrency/celluloid.rb | 21 +++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/slack/real_time/concurrency/celluloid.rb b/lib/slack/real_time/concurrency/celluloid.rb index a0b528be..1f8b0ad8 100644 --- a/lib/slack/real_time/concurrency/celluloid.rb +++ b/lib/slack/real_time/concurrency/celluloid.rb @@ -68,9 +68,12 @@ def write(data) end def start_async(client) - Thread.new do - client.run_loop - end + @client = client + Actor.new(future.run_client_loop) + end + + def run_client_loop + @client.run_loop end def connected? @@ -79,6 +82,18 @@ def connected? protected + class Actor + attr_reader :future + + def initialize(future) + @future = future + end + + def join + @future.value + end + end + def build_socket socket = ::Celluloid::IO::TCPSocket.new(addr, port) socket = ::Celluloid::IO::SSLSocket.new(socket, build_ssl_context) if secure?