Sha256: 4abcdd67ebf31d177652994f0227840879c0b842957a17fbe5c73c6391e4e368
Contents?: true
Size: 1.67 KB
Versions: 2
Compression:
Stored size: 1.67 KB
Contents
require "sinatra/base" require "sinatra-websocket" require "thin" require "rack" require "rack/sockjs" require 'observer' require 'json' class Level1 include Observable attr_reader :level1 def initialize @level1 = { bid: 0.0, ask: 0.0, last: 0.0 } end def update_level1 level1 @level1 = level1 changed notify_observers :level1, level1 end end class SocketWrapper def initialize socket, level1 level1.add_observer self @level1 = level1 @socket = socket end def close @level1.delete_observer self end def update action, *data case action when :level1 @socket.send({ action: action, level1: data[0] }.to_json) end end end class Webapp < Sinatra::Base configure do set :threaded, false end set :public_folder, "public" set :sockets, [] get "/" do redirect "/index.html" end get "/ws" do request.websocket do |ws| wrapper = nil ws.onopen do wrapper = SocketWrapper.new ws, @@level1 wrapper.update :level1, @@level1.level1 settings.sockets << wrapper end ws.onclose do wrapper.close settings.sockets.delete wrapper end ws.onmessage do |msg| # don't need to do anything end end end def self.setup @@level1 = Level1.new end def self.level1_update level1 @@level1.update_level1 level1 end end def run_webserver opts Webapp.setup webapp = Webapp.new dispatch = Rack::Builder.app do map "/" do run webapp end end Rack::Server.start({ app: dispatch, server: "thin", host: "0.0.0.0", port: opts[:port] }) end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ruby-trade-0.2 | server/web_server.rb |
ruby-trade-0.1 | server/web_server.rb |