From 05c78c848db76a705add944b9fad6f6e57c3fd3c Mon Sep 17 00:00:00 2001 From: brainopia Date: Sun, 19 Oct 2008 22:02:56 +0400 Subject: [PATCH] Finally bug fixed - Juggernaut can be proud of me =) --- app/controllers/rooms_controller.rb | 1 + app/workers/checker.rb | 17 ++++++++ log/workling.output | 60 +++++++++++++++++++++++++++++ script/starling_status.rb | 35 +---------------- 4 files changed, 79 insertions(+), 34 deletions(-) create mode 100644 app/workers/checker.rb create mode 100644 log/workling.output mode change 100755 => 100644 script/starling_status.rb diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb index a2dae2b..bae3b40 100644 --- a/app/controllers/rooms_controller.rb +++ b/app/controllers/rooms_controller.rb @@ -16,6 +16,7 @@ def show # debug_message "Connected(#{@place.name}): " + Place.all.map {|it| [it.name, it.connections, Time.now - it.updated_at]}.inspect connect if @place.connections == 1 save_to_cookie + Checker.async_wait :place_id => @place.id end def destroy diff --git a/app/workers/checker.rb b/app/workers/checker.rb new file mode 100644 index 0000000..8a90a3e --- /dev/null +++ b/app/workers/checker.rb @@ -0,0 +1,17 @@ +class Checker < Workling::Base + def wait(options) + sleep 10 + place = Place.find options[:place_id] + + logger.error place.user.id, place.room.permalink + + if !Juggernaut.client_in_channel?(place.user.id, place.room.permalink) and place.connections > 0 + place.decrement! :connections + + data = { :command => 'disconnect', :user => place.user.id } + json = data.inject({}) {|escaped_data,(k,v)| escaped_data.merge k => JuggernautJSON::Helper.h(v) }.to_json + + Juggernaut.send_to_channel json, place.room.permalink + end + end +end diff --git a/log/workling.output b/log/workling.output new file mode 100644 index 0000000..5926c0e --- /dev/null +++ b/log/workling.output @@ -0,0 +1,60 @@ +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +/Users/brainopia/code/rails/gobrain/vendor/plugins/workling/lib/workling/starling/client.rb:47:in `raise_unless_connected!': config/starling.yml configured to connect to starling on localhost:22122 for this environment. could not connect to starling on this host:port. pass starling the port with -p flag when starting it. If you don't want to use Starling at all, then explicitly set Workling::Remote.dispatcher (see README for an example) (Workling::StarlingNotFoundError) + from /Users/brainopia/code/rails/gobrain/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:42:in `join' + from /Users/brainopia/code/rails/gobrain/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:42:in `listen' + from /Users/brainopia/code/rails/gobrain/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:42:in `each' + from /Users/brainopia/code/rails/gobrain/vendor/plugins/workling/script/../lib/workling/starling/poller.rb:42:in `listen' + from /Users/brainopia/code/rails/gobrain/vendor/plugins/workling/script/listen.rb:19 + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/application.rb:176:in `load' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/application.rb:176:in `start_load' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/application.rb:257:in `start' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/controller.rb:69:in `run' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons.rb:139:in `run' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/cmdline.rb:105:in `call' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons/cmdline.rb:105:in `catch_exceptions' + from /opt/local/lib/ruby/gems/1.8/gems/daemons-1.0.10/lib/daemons.rb:138:in `run' + from script/workling_starling_client:17 +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting +=> Loading Rails... +** Rails loaded. +** Starting Workling::Starling::Poller... +** Use CTRL-C to stop. +** Exiting diff --git a/script/starling_status.rb b/script/starling_status.rb old mode 100755 new mode 100644 index ad89d1c..1720e6f --- a/script/starling_status.rb +++ b/script/starling_status.rb @@ -1,34 +1 @@ -require 'pp' - -puts '=> Loading Rails...' - -require File.dirname(__FILE__) + '/../config/environment' -require File.dirname(__FILE__) + '/../vendor/plugins/workling/lib/workling/starling/poller' -require File.dirname(__FILE__) + '/../vendor/plugins/workling/lib/workling/starling/routing/class_and_method_routing' - -puts '** Rails loaded.' - -trap(:INT) { exit } - -begin - client = Workling::Starling::Client.new - client.reset - - client.stats # do this so that connection is shown as established below. - - puts "Queue state:" - pp client.inspect - pp "Active?: #{client.active?}" - pp "Read Only?: #{client.readonly?}" - puts "" - puts "Servers:" - pp client.servers - puts "" - puts "Queue stats:" - pp client.stats - - puts "\nThread Stats:" - pp Thread.list -ensure - puts '** Exiting' -end \ No newline at end of file +1173 \ No newline at end of file