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