Sha256: 4e7363100b4b88dd21a8e2fc2d696725f9e7a2bd1e676a70a6a8fc157b07d9a4

Contents?: true

Size: 1.36 KB

Versions: 24

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

require 'bundler/setup'
require 'polyphony'
require 'websocket'

::Exception.__disable_sanitized_backtrace__ = true

class WebsocketClient
  def initialize(url, headers = {})
    @socket = TCPSocket.new('127.0.0.1', 1234)
    do_handshake(url, headers)
  end

  def do_handshake(url, headers)
    handshake = WebSocket::Handshake::Client.new(url: url, headers: headers)
    @socket << handshake.to_s
    @socket.read_loop do |data|
      handshake << data
      break if handshake.finished?
    end
    raise 'Websocket handshake failed' unless handshake.valid?
    @version = handshake.version

    @reader = WebSocket::Frame::Incoming::Client.new(version: @version)
  end

  def receive
    @socket.read_loop do |data|
      @reader << data
      parsed = @reader.next
      return parsed if parsed
    end
  end

  def send(data)
    frame = WebSocket::Frame::Outgoing::Client.new(
      version: @version,
      data: data,
      type: :text
    )
    @socket << frame.to_s
  end
  alias_method :<<, :send

  def close
    @socket.close
  end
end


(1..3).each do |i|
  spin do
    client = WebsocketClient.new('ws://127.0.0.1:1234/', { Cookie: "SESSIONID=#{i * 10}" })
    (1..3).each do |j|
      sleep rand(0.2..0.5)
      client.send "Hello from client #{i} (#{j})"
      puts "server reply: #{client.receive}"
    end
    client.close
  end
end

suspend

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
tipi-0.55 examples/websocket_client.rb
tipi-0.54 examples/websocket_client.rb
tipi-0.53 examples/websocket_client.rb
tipi-0.52 examples/websocket_client.rb
tipi-0.51 examples/websocket_client.rb
tipi-0.50 examples/websocket_client.rb
tipi-0.49 examples/websocket_client.rb
tipi-0.47 examples/websocket_client.rb
tipi-0.46 examples/websocket_client.rb
tipi-0.45 examples/websocket_client.rb
tipi-0.43 examples/websocket_client.rb
tipi-0.42 examples/websocket_client.rb
tipi-0.41 examples/websocket_client.rb
tipi-0.40 examples/websocket_client.rb
tipi-0.39 examples/websocket_client.rb
tipi-0.38 examples/websocket_client.rb
tipi-0.37.2 examples/websocket_client.rb
tipi-0.37.1 examples/websocket_client.rb
tipi-0.37 examples/websocket_client.rb
tipi-0.36 examples/websocket_client.rb