Sha256: d1d077c9f14a21ca5b78c5ecbfadab10f184406798db1fbc7566c248d5a93489

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

module Terminalwire
  module Transport
    class Base
      def initialize
        raise NotImplementedError, "This is an abstract base class"
      end

      def read
        raise NotImplementedError, "Subclass must implement #read"
      end

      def write(data)
        raise NotImplementedError, "Subclass must implement #write"
      end

      def close
        raise NotImplementedError, "Subclass must implement #close"
      end
    end

    class WebSocket
      def initialize(websocket)
        @websocket = websocket
      end

      def read
        @websocket.read&.buffer
      end

      def write(data)
        @websocket.write(data)
      end

      def close
        @websocket.close
      end
    end

    class Socket < Base
      def initialize(socket)
        @socket = socket
      end

      def read
        length = @socket.read(4)
        return nil if length.nil?
        length = length.unpack('L>')[0]
        @socket.read(length)
      end

      def write(data)
        length = [data.bytesize].pack('L>')
        @socket.write(length + data)
      end

      def close
        @socket.close
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
terminalwire-0.1.1 lib/terminalwire/transport.rb