Forums | Admin

Discussion Forums: open-discussion

Start New Thread Start New Thread

 

By: Genki Takiuchi
RE: shooting_starからRailsプログラムへの入退室イベント [ reply ]  
2007-08-12 22:42
瀧内です。

ShootingStar-3.2.0で入退室管理を行うためのスクリプトのサンプルをscript/chat_observerとして同梱いたしました。

trunkをCheckOutしてRailsアプリケーションとして起動した状態で、./script/chat_observerを立ち上げると、入退室情報を取得することができます。

By: Dao Ngoc
RE: shooting_starからRailsプログラムへの入退室イベント [ reply ]  
2007-07-28 09:07
ゴックです。

ご回答ありがとうございます。

1.

ShootingStar#transmit では
p obs
puts obs.respond_to?(event)
を追加してみたら結果が
#<DRb::DRbUnknown:0xb7b656b8 ...>
false
となっていますのでDRbについて調べました。

この資料 http://rubygarden.org/ruby/page/show/DRbTutorial を参考して次の編集をしてみました:

class MyObserver
include DRbUndumped # <-- HERE
...
end

class Meteor < ActiveRecord::Base
...
def initialize(config)
config['shooting_star'] ||= {'shooter' => 'druby://localhost:7123'}
uris = config['shooting_star']['shooter']
DRb.start_service # <-- HERE
@shooters = [uris].flatten.map{|uri| DRbObject.new_with_uri(uri)}
end
...
end

これで production モードで実行すればうまく行きました。

2.

もう一つの問題があります。

もしshooting_starプロセスでは
Channel[<path>]
が事前に存在しないと
Meteor.shooter.observer(<path>, my_observer)
は失敗してしまいます。具体的には
ShootingStar#Shooter#observe で
NoMethodError: undefined method `observe' for nil:NilClass
というエラーが出ます。

どうしたらよろしいでしょうか?

よろしくお願いします。

By: Genki Takiuchi
RE: shooting_starからRailsプログラムへの入退室イベント [ reply ]  
2007-07-27 01:12
瀧内です

> その実装はできたのでしょうか?

とりあえず簡易版を実装していますが、動作検証が
まだされていない状態ですね。

> ソースコードを見て、自分のRailsプログラムでMeteor.shooter.obs
> erver(<path>, my_observer)を使ってみたがイベントの取得はできな
> かった。

具体的な実行環境が良くわからないので想像なのですが、
Observerオブジェクトは、イベントを受け取るために
ずっと生き続けていなければいけないので、バックグラウンド
プロセスなどから登録してみたらうまく行くかもしれません。

あるいは、大変申し訳ないですがバグでちゃんと
動いてないという可能性もあります。

この機能は現行バージョンではまだまだ未完成な機能なので、
次期バージョン(3.2)ではサンプルアプリに組み込むなど、
もうちょっと充実させる予定です。

よろしくお願いします。

By: Dao Ngoc
shooting_starからRailsプログラムへの入退室イベント [ reply ]  
2007-07-25 22:08
お世話になっております。

自分のRailsプログラムで「部屋に誰かが入りました」とか「部屋から出ました」とかのことを知りたいです。

1.
メーリングリスト(http://rubyforge.org/pipermail/shooting-star-developers/2007-June/000005.htmld)には以下のメッセージがあります:

「これから実装するとしたら、druby経由でObserverオブジェクトを渡して、特定のイベントが発生したタイミングでコールバックさせる感じになるかな。」

その実装はできたのでしょうか?

2.
ソースコードを見て、自分のRailsプログラムでMeteor.shooter.observer(<path>, my_observer)を使ってみたがイベントの取得はできなかった。

class MyObserver
def enter(params)
puts 'enter'
end

def leave(params)
puts 'leave'
end

def update(params)
puts 'update'
end
end

my_observer = MyObserver.new

よろしくお願いします。