Class: DatawireQuarkCore::WSAdapter
Instance Attribute Summary
Attributes inherited from Adapter
#servlet, #source, #uri, #url
Instance Method Summary
collapse
Methods inherited from Adapter
#effective_url, #initialize, #key, #scheme_supported?, #secure?
Instance Method Details
#process_request(rq) ⇒ Object
866
867
868
869
870
871
872
|
# File 'lib/datawire-quark-core.rb', line 866
def process_request(rq)
if rq.request.websocket?
@events.event { rq.ws_handler = servlet.onWSConnect(rq); rq.respond :detach }
else
rq.fail! 400, "websockets here, move along\r\n"
end
end
|
#process_response(rq) ⇒ Object
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
|
# File 'lib/datawire-quark-core.rb', line 873
def process_response(rq)
if rq.ws_handler.nil?
rq.fail 403, "Forbidden\r\n"
else
websocket = rq.request.websocket
sock = ServerWebsocketAdapter.new(websocket)
handler = rq.ws_handler
src = @events.add ("server websocket")
events = @events
@events.event { handler.onWSInit(sock) }
@events.event { handler.onWSConnected(sock) }
websocket.on_close do |wsevent|
events.event { handler.onWSClosed(sock) }
events.event(final:src) { handler.onWSFinal(sock) }
end
websocket.on_error do |wsevt|
events.event { handler.onWSError(sock, ::Quark.quark.WSError.new(wsevt.message)) }
end
Thread.new do
while not websocket.closed?
data = websocket.read
case data
when Array then
buffer = Buffer.new(data.pack("C*"))
events.event { handler.onWSBinary(sock, buffer) }
when String then
events.event { handler.onWSMessage(sock, data) }
end
end
end
end
rescue => ex
puts "aieieie", ex
end
|
#schemes ⇒ Object
862
863
864
|
# File 'lib/datawire-quark-core.rb', line 862
def schemes
{plain: "ws", secure: "wss"}
end
|