forked from ManageIQ/manageiq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebsocket_webmks.rb
30 lines (25 loc) · 882 Bytes
/
websocket_webmks.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class WebsocketWebmks < WebsocketSSLSocket
attr_accessor :url
def initialize(socket, model)
super(socket, model)
@url = URI::Generic.build(:scheme => 'wss',
:host => @model.host_name,
:port => @model.port,
:path => "/ticket/#{@model.secret}").to_s
@driver = WebSocket::Driver.client(self, :protocols => ['binary'])
@driver.on(:close) { socket.close unless socket.closed? }
@driver.start
end
def fetch(length)
# WebSocket::Driver requires an event handler that should be registered only once
@driver.on(:message) { |msg| yield(msg.data) } if @driver.listeners(:message).length.zero?
data = @ssl.sysread(length)
@driver.parse(data)
end
def issue(data)
@driver.binary(data)
end
def write(data)
@ssl.syswrite(data)
end
end