1. 概要

人多いBotのTwitterインターフェースである。また、デバッグ用にhtmlのクライアントも用意されている。必要であれば適切なファイル名/ディレクトリ名でclient/以下に追加すること。
稼働時にはディレクトリ構成は以下のようになっている必要がある。

構成
client/
├── bot/
│   ├── Gemfile
│   ├── config.yaml
│   ├── dummy_server.rb
│   ├── lib/
│   │   ├── bot.rb
│   │   └── tools.rb
│   ├── rogywatch.rb
│   └── rogywatch.sh*
├── main.js
└── websocket.html

2. 設定

rogywatch.rbは同ディレクトリに配置されたconfig.yamlを設定ファイルとする。各種情報をこれに記載する必要がある。

config.yaml
:rogy_watch:
  :consumer_key         :  "rogy_watch_consumer_key"
  :consumer_secret      :  "rogy_watch_consumer_secret"
  :access_token         :  "rogy_watch_access_token"
  :access_token_secret  :  "rogy_watch_access_token_secret"
  :admin                :
  - 114514
  - 334334
  :media_dirs           :
  - "/path/to/rogywatch/v1/output"
  - "/path/to/rogywatch/v2/output"
  :restart_time: "24:00:00"
:server:
    :ws:
      :std:
        :address  : "localhost"
        :port     : 8000
      :err:
        :address  : "localhost"
        :port     : 8500
        :timeout  : 10
        :connection_timeout  : 20
rogywatch

Twitter Botに関する設定と画像の取得元を設定する。consumer_key等は適宜設定する必要がある。

admin

管理者のTwitter id。Screen nameではない。

media_dirs

人多いBotが人数を数える際に出力する画像のあるディレクトリを指定する。現在は人多いBotPC/shareディレクトリを/mnt/以下にマウントしている。

server

人多いBotのAPIServerとの接続に関する情報を記述する。

ws

WebSocketServerに関する情報。

std

標準入出力の情報

err

標準エラー出力の情報

timeout

read(timeout)に指定する値。超過した場合 Timeout::Error が投げられる。

connection_timeout

標準エラー出力につなぐ際のタイムアウトを設定する。設定したタイムアウトを超過し、標準エラー出力との接続に失敗した場合、例外情報を含む全ての情報が標準入出力経由のやり取りとなる。

3. 動作

ツイートを調べてサーバーに接続してリプを返すシンプルな動作であるが、少々注意が必要である。

3.1. WebSocketAPIへの接続

多くのWebSocketライブラリではコールバックを設定して非同期で通信を行うのが主流であるが、本プログラムではツイートへの応答、標準入出力と標準エラー出力への接続を考えてタイムアウトと同期メソッドを用いて実現している。WebSocketについては接続自体は複雑ではないが、フレームの処理が少々面倒であるので以下などを参考にすると良い。

3.2. 受信の際の動作

read(timeout)メソッドにてサーバーからの情報を受信するが、当然引数にはタイムアウトを設定する。
また、標準エラー出力は単にサーバーが標準入出力とは別の接続で情報を送ってくるだけであるが、read(timeout)メソッド内では標準エラー出力から情報を受信すると例外を発生させるようにしている。