class Clacky::Channel::Adapters::Feishu::WSClient
def start_ping_thread
def start_ping_thread @ping_thread&.kill @ping_thread = Thread.new do loop do sleep @ping_interval break unless @running begin @seq_id += 1 send_frame( seq_id: @seq_id, log_id: 0, service: @service_id, method: 0, headers: { "type" => "ping" } ) rescue => e Clacky::Logger.warn("[feishu-ws] ping failed (#{e.class}: #{e.message}), forcing reconnect") # Close the socket so IO.select in the read loop immediately # returns nil / read_nonblock raises IOError, triggering reconnect. @ws_socket&.close rescue nil break end end end end