#!/usr/bin/env ruby require 'didkit' require 'json' require 'skyfall' # $ gem install skyfall didkit class PLCMessage attr_reader :seq, :type, :op def initialize(data) @json = JSON.parse(data) @seq = @json['seq'] @type = @json['type'].to_sym return if @type != :sequenced_op @op = DIDKit::PLCOperation.new(@json) end end class PLCStream < Skyfall::Stream def initialize super('plc.directory') end def handle_message(msg) if @handlers[:message] @handlers[:message].call(PLCMessage.new(msg.data)) end end def build_websocket_url @root_url + "/export/stream" end end plc = PLCStream.new plc.on_connecting { |u| puts "Connecting to #{u}..." } plc.on_connect { puts "Connected ✓" } plc.on_disconnect { puts "Disconnected." } plc.on_error { |e| puts "Error: #{e.class} #{e.message}" } plc.on_message do |msg| puts "#{msg.seq} [#{msg.op.created_at}]: #{msg.op.did} -> #{msg.op.handles.first} (@ #{msg.op.pds_host})" end plc.connect