複数の画面を備えた物理的なインストールを目的としたsinatraアプリで、websocket-rackの動作構成を取得しました。メッセージが Websocket を介して正常にやり取りされる機能があります。
私の問題はこれです: 標準の Web フォーム (つまり、websocket フォームではない) を含むページが 1 つあり、私の目標は、そのフォームからパラメーターを収集し、パラメーターを文字列変数に変換してから、その変数の内容を送信することです (文字列) を websocket を介して別のページ/画面に送信します。私の人生では、アプリのメインクラスからソケットクラスと通信できないため、比較的単純なタスクを行う方法を理解できません。これは、私が理解していることから、基本的にラックアプリ。
resque を仲介者として設定して解決しようとしましたが、問題が変わっていないことがすぐにわかりました。メソッドを呼び出したり、変数を別のクラスからソケットに渡したりして、ブラウザにプッシュする方法がわかりません。
基本的に、次のような app.rb があります。
module SomeThing
class App < Sinatra::Base
get '/' do
#show a form
end
post '/submit' do
#receive params
#save params
new_message = params.inspect
#dream up some way to pass new_message to websocket
end
post '/otherscreen' do
#have an open websocket to receive new_message
end
end
class Socket < Rack::WebSocket::Application
def on_open(env)
puts "Client connected"
send_data "Oh hai!"
end
def on_close(env)
puts "Client disconnected"
end
def on_message(env, msg)
puts "Received message from client: " + msg
end
def on_error(env, error)
puts "An error occured: " + error.message
end
def pass_message(env, new_message)
send_data new_message
end
end
end
これを解決するためにさらに情報が必要な場合はお知らせください。必要なものは何でも提供させていただきますが、現時点で何が必要かはわかりません。
どうすればこれを解決できるか知っていますか? それは私を殺している。
お早めにどうぞ!