2011/03/02

[nfc][dep]どう非同期にしたものか

DEP関係のコマンドは、相手が何かしないとレスポンスが返ってこない。
いずれは、タイムアウトやユーザからのキャンセルにも対応せねば。
そう考えると、今のうちに非同期APIにしておいたほうが無難だ。

しかし、私は楽をしたい。
どんなプラットフォームでも使えるライブラリがいいんだろうけど、そんな労力を裂くのは嫌だ。
できるだけ簡単に非同期化したい。

思いつくのは、

  • POSIXなどのスレッドで使われることを前提にしてしまう
  • コールバックで返してやる

まあ、コールバックにしておくのがいいんだろうけど、じゃあ受信はどうやってさせるんだ?ということになってしまう。
ポーリングするAPIを用意して定期的に呼んでもらうくらいしかないなぁ。

Androidでやるなら、バックグラウンドでサービスを回しっぱなしにして、そこで定期的に呼んでもらうという手がある。
まあ、今がそんな感じだ。
携帯電話向けの実装なら、割り込みにするなどして消費電力を抑えないといかんけど、RC-S620/Sだからそこまで考えなくていいだろう。
搬送波だって、みっともないけど出しっぱなしだ。
(Nexux Sって、確か画面が点いている間は搬送波出しっぱなしだし、FeliCaロックみたいな形の止め方がないような気もするし、電池の減りが早そうだなぁ。)

まあ、それはそれとして。
受信側をポーリングにすると、全体的に非同期にしなくてはやりづらい。
かといって、なんもかんも非同期にすると、アプリがめんどくさくなりそうな。
通常のコマンドくらいなら、同期でも十分間に合うと思うのだよ。

そうなると、同期APIの場合は、ユーザからのコンテキストで待たせておいて、サービスからのコンテキストで受信結果が返るまで待たせる、ということになる。
そんな実装くらいしか思いつかない。

そうしてしまうと・・・cygwinで簡単に実装して動かす、というわけにはいかなくなる。
ちゃんとpthreadかなんかで動かす部分も一緒に作らなくてはならない。

ほら、めんどくさい。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。