リモート操作アプリの開発日誌(其の三)
うーむ。
とりあえずShakeHandのシーケンスを作った時点でプロトタイプは満足してしまった。
当初の予定には届いていないが、これ以上プロトタイプで作っているとやる気が失せてしまう。趣味プログラミングは動機が大事。火が消えないうちに薪をくべるのだ。
ということでいろいろとプロトタイプの不満を直すことに。
言語は、C言語で。一番応用が利くかな?的な理由。でもC++も捨てがたい。どうしよう。いまだに悩みつつC言語に決定。
とりあえず直そうと思っているポイント。
- モジュールの分割
- Engine
- シーケンスを握るモジュール。テストはモックを作る必要があるのでちょっと大変。
- Message
- Debug
- Event
- イベントのQueueとイベントの構造体を提供する。
- イベントは内部的なもの。例えばネットワークのRead要求やWrite要求。
- Queueはメモリの都合上、有限長がよい。長さが限界になるようならデータを取得しないか、落とす必要がある。
- Framebufferの場合、差分データが落ちる可能性があるため、適宜(数秒に1回、とか)の割合で、全画面(keyframe?)要求した方がよいかもね。
- Network
- ネットワーク機能。別スレッドにする。
- pushタイプ。Network利用者がコールバックを作成。データが到着したらコールバック呼び出しする。専用オブジェクトは必要か。
- Util
- Graph
- Rectとか、描画に利用しそうな機能を入れる。
- スクロールや拡縮、重ね合わせなどの機能も入れる。
- ベジエ曲線とかアフィン変換とかもいる?行列計算も?
- Mathみたいなファイルに分割するかも
- Timer
- タイマ管理機能。TimeoutまでのカウントダウンとPeriodicなもの。。。くらいか。凝る予定はない。
- Engine
- スレッドの使用
- EngineスレッドとNetworkスレッドを作る
- データの受け渡しは共有メモリ&キューで行う。共有メモリはキューのエントリにひもづく。enqueueやdequeueのときはmutexを使用。ひもづいているメモリ領域を使用する際はmutex不要。enqueueやdequeueをした段階で、共有メモリ領域の所有権が移動するため。移動したことにするのです。
うーむ。思いつきで書いていて、全然推敲してない文章だがいいのだろうか。いやよくない。
ロードマップとかもちゃんと引いた方がいいかな。マイルストーンってやる気に影響するし。
でも眠いので続きはまた明日。
あ。共有メモリ領域ってどうやって確保したらいいんだろ。write要求って何を渡すんだ?mallocした領域でいいのか?削除はどういうタイミングでやれば?うーん。どうしよ。もっと設計詰めなきゃなー。楽しいなぁ。