ユーザ用ツール

サイト用ツール


kitchen_timer:コントローラの開発

コントローラの開発

コントローラは、クライアントスクリプト(JavaScript)とワーカーの仲介がほとんどで、かつそれらはフレームワークによって隠蔽されているので、非常に単純です。

コーディング

似た動作をするサンプルを見つけて、それをコピーする方法が簡単です。
IPCとServerSentEventsがあるので、チャットサンプルをコピーすると良さそうです。

cd /usr/local/kitchen_timer
cp controllers.bak/chat/main.rb controllers
cp controllers.bak/chat/index.rhtml controllers

コピーしたmain.rb を以下の通り編集します。

main.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
require "al_form"
require "al_template"
require "al_worker_ipc"
 
class KitchenTimerContoller < AlController
  include AlWorker::IpcAction
 
  ##
  # constructor
  #
  def initialize()
    @ipc = AlWorker::Ipc.open( "/tmp/kitchen_timer" )
  end
 
 
  #
  # デフォルトアクションの定義
  #
  def action_index()
    @values = @ipc.call( "get_values" )
    AlTemplate.run( 'index.rhtml' )
  end
end

編集のポイントは、以下の3点です。

  • IPCノード名を、kitchen_timerに変更する。
  • chatではrun_server()メソッドを使ってコントローラからサーバを常駐させているが、このプロジェクトではシステム起動時に常駐させるので、run_server()メソッド関連のコードは削除。
  • テンプレート適用前に、IPC - get_valuesで、表示用の値を@valuesへコピーしておく。

表示用の値は、IPCにデフォルトで用意されている機能である get_values を使い取得します。そのため別途現在値を取得するIPCメソッドを記述することなく、ブラウザへ最新値を表示することが可能です。

(注意)ブラウザの表示(IPC-get_values) と、ServerSentEventsを使った画面変更リクエストのプッシュには、ほんのわずかですがタイムラグがあると思われます。もしその間に画面変更が発生した場合、それを取りこぼすかもしれません。もしそのような現象が問題になるようなら、別な戦略が必要になると思われます。

kitchen_timer/コントローラの開発.txt · 最終更新: 2014/11/21 01:22 by hirohito