ORCL0030CheckServer
OpenDolphin で CLAIM 送信した後,送った CLAIM の処理が終了したことを知らせるサーバを ruby で作った。CLAIM 処理が完了すると,ORCA サーバのシステムログに
Feb 24 12:22:22 orca panda/dbstub[3720]: module ORCL0030: /var/tmp/claim_rcv_0
というログが出るのを検出して知らせるといういかにも素人くさい方法。CLAIM 処理終了が確認できるので,CLAIM 処理が終わる前にORCAの「中途終了」ボタンを押してしまって,「中途終了データはありません」と言われなくてすむようになる。
ORCA サーバでの立ち上げ方法。11792 は適当な空きポート。
$ sudo tail -f -n0 /var/log/syslog | ruby ORCL0030CheckServer.rb 11792
ORCL0030CheckServer.rb
#!/usr/bin/ruby require "socket" require "timeout" default_port = "11792" if ARGV.length == 0 port = default_port else port = ARGV.shift end ACK = 0x06.chr # receive ACK from client class GetAck def initialize(s) @sock = s end def get begin timeout(1) { while ACK != @sock.read(1); end } return true rescue Timeout::Error end end end # send ORCL0030 to client class SendOrcl def initialize(s) @sock = s end def send ack = GetAck.new(@sock) max = 5 str = "ORCL0030" for i in 1..max do begin @sock.puts(str) break if ack.get rescue Errno::EPIPE $stdout.puts("retry: " + i.to_s) sleep 1 end end return i < max end end # クライアントと接続したスレッドを保持する配列 thr = [] # stdin を監視するスレッド Thread.start() { while line = $stdin.gets line.chop! if /ORCL0030.*claim_rcv/ =~ line for t in thr t.wakeup end end end } gsock = TCPServer.open(port) # クライアントと接続したスレッドを作り thr に登録 while true $stdout.puts("Wait for another connection") Thread.start(gsock.accept) do |sock| addr = sock.peeraddr $stdout.puts("Connected " + addr.join(":")) thr.push(Thread.current) # クライアントと接続したら指示があるまで待つ while true Thread.stop break if !SendOrcl.new(sock).send end sock.close $stdout.puts("Close socket") thr.delete(Thread.current) end end
ORCL0030Listener
java で書いたクライアント。(NetBeans 6.9.1 のプロジェクト)ダウンロード ORCL0030.zip (1475.0K)
起動画面 | ORCL0030 を受けると,うさぎアイコンが跳ねる |
« 3年間の運用まとめ | トップページ | com.sun.image.codec の置き換え »
「ダウンロード」カテゴリの記事
- OpenDolphin-1.3.0.1 ソース公開(2009.03.24)
- ORCA マスター登録ソフト(2009.03.27)
- OpenDolphin-1.3.0.2 ソース公開(2009.09.19)
- 紹介状作成 NeoOffice マクロ(2009.09.21)
- OpenDolphin-1.3.0.3 公開(Java 1.6 専用)(2009.10.29)