Class: DatawireQuarkCore::Runtime
- Inherits:
-
Object
- Object
- DatawireQuarkCore::Runtime
- Defined in:
- lib/datawire-quark-core.rb
Instance Method Summary collapse
- #callSafely(unary_callable, default) ⇒ Object
- #codec ⇒ Object
- #fail(message) ⇒ Object
-
#initialize ⇒ Runtime
constructor
A new instance of Runtime.
- #logger(topic) ⇒ Object
- #now ⇒ Object
- #open(url, handler) ⇒ Object
- #request(request, handler) ⇒ Object
- #respond(request, response) ⇒ Object
- #schedule(task, delay) ⇒ Object
- #serveHTTP(url, servlet) ⇒ Object
- #serveWS(url, servlet) ⇒ Object
- #sleep(seconds) ⇒ Object
- #uuid ⇒ Object
Constructor Details
Instance Method Details
#callSafely(unary_callable, default) ⇒ Object
667 668 669 670 671 672 673 674 |
# File 'lib/datawire-quark-core.rb', line 667 def callSafely(unary_callable, default) begin ::Quark.quark.callUnaryCallable(unary_callable, nil) rescue @log.error("Exception while calling safely: #{$!}") default end end |
#codec ⇒ Object
651 652 653 |
# File 'lib/datawire-quark-core.rb', line 651 def codec return Codec.new end |
#fail(message) ⇒ Object
642 643 644 645 |
# File 'lib/datawire-quark-core.rb', line 642 def fail() @log.error exit! 1 end |
#logger(topic) ⇒ Object
647 648 649 |
# File 'lib/datawire-quark-core.rb', line 647 def logger(topic) return Logger.new topic end |
#now ⇒ Object
655 656 657 |
# File 'lib/datawire-quark-core.rb', line 655 def now (Time.now.to_f * 1000).round end |
#open(url, handler) ⇒ Object
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 |
# File 'lib/datawire-quark-core.rb', line 599 def open(url, handler) begin src = @events.add "ws client" client = WebsocketClient.new(url) sock = WebsocketAdapter.new(client) events = @events events.event { handler.onWSInit(sock) } client.on_client(:open) do |wsevt| # puts "open" sock.opened = true events.event { handler.onWSConnected(sock) } end client.on_client(:message) do |wsevt| # puts "message" case wsevt.data when Array then buffer = Buffer.new(wsevt.data.pack("C*")) events.event { handler.onWSBinary(sock, buffer) } when String then events.event { handler.onWSMessage(sock, wsevt.data) } end end client.on_client(:close) do |wsevt| # puts "close" if sock.opened events.event { handler.onWSClosed(sock) } end events.event(final:src) { handler.onWSFinal(sock) } end client.on_client(:error) do |wsevt| # puts self events.event { handler.onWSError(sock, ::Quark.quark.WSError.new(wsevt.)) } end client.issues.on(:start_failed) do |err| events.event { handler.onWSError(sock, ::Quark.quark.WSError.new(err.to_s)) } events.event(final:src) { handler.onWSFinal(sock) } end Thread.new { client.run } rescue ::Exception => err puts "AIEEE", err, err.backtrace end end |
#request(request, handler) ⇒ Object
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 |
# File 'lib/datawire-quark-core.rb', line 554 def request(request, handler) src = @events.add "http request" t = Thread.new do begin url = request.getUrl @events.event { handler.onHTTPInit url } headers = {} request.getHeaders.each { |k| headers[k] = request.getHeader k } uri = URI(url) req = Net::HTTPGenericRequest.new(request.getMethod.upcase, 1, 1, uri, headers) req.body = request.getBody res = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do | http | http.request(req) end response = HTTP::Response.new response.setCode(res.code.to_i) response.setBody(res.body) @events.event { handler.onHTTPResponse request, response } rescue Exception => e #@log.warn "EXCEPTION: #{e.inspect}" #@log.warn "MESSAGE: #{e.message}" @events.event { handler.onHTTPError request, ::Quark.quark.HTTPError.new(e.) } ensure @events.event(final:src) { handler.onHTTPFinal request } end end end |
#respond(request, response) ⇒ Object
591 592 593 594 595 596 597 |
# File 'lib/datawire-quark-core.rb', line 591 def respond(request, response) if request.rs == response request.respond :http_response else request.fail! 500, "servlet failed to pair up request and response\r\n" end end |
#schedule(task, delay) ⇒ Object
550 551 552 553 |
# File 'lib/datawire-quark-core.rb', line 550 def schedule(task, delay) src = @events.add "timer" @events.schedule(delay) { @events.event(final:src) { task.onExecute self } } end |
#serveHTTP(url, servlet) ⇒ Object
583 584 585 |
# File 'lib/datawire-quark-core.rb', line 583 def serveHTTP(url, servlet) @servers.add(HTTPAdapter.new(url, servlet, @events)) end |
#serveWS(url, servlet) ⇒ Object
587 588 589 |
# File 'lib/datawire-quark-core.rb', line 587 def serveWS(url, servlet) @servers.add(WSAdapter.new(url, servlet, @events)) end |
#sleep(seconds) ⇒ Object
659 660 661 |
# File 'lib/datawire-quark-core.rb', line 659 def sleep(seconds) Kernel.sleep seconds end |
#uuid ⇒ Object
663 664 665 |
# File 'lib/datawire-quark-core.rb', line 663 def uuid SecureRandom.uuid end |