C/C++の宿題やらせてください。6代目。
■ このスレッドは過去ログ倉庫に格納されています
0345デフォルトの名無しさん
NGNGインスタンスと処理内容が重なる場合のコーディングについてアドバイスなど頂けない
でしょうか。あまりC++は得意ではないのと、長文にご容赦を。
HTTPのサーバを想定してみてください。
まずクライアントから送られてくる要求は、read()?などでバッファに受け、その後
バッファ中のデータがどんなヘッダなのか解析しますね。
ヘッダ解析は逐次トークンを取得する処理を呼び出して解析に掛けるものとします。
ここでHTTPを処理するクラスをCHttp、ネット関連のI/O全体を統括するクラスをCNetIO、
トークンを処理するクラスをCTokenとでもしましょう。
仮にURLが冗長だったりして、トークン処理クラスが参照しているバッファ中のアドレス
が、バッファの領域からはみ出そうとしたとします。
このとき、トークン処理クラスは即時にエラーを返さず、read()関数など呼び出して後
のデータが来ていないかどうかタイムアウトするまで待つものとします。つまり、CToken
をエラーが起きるかあるいはCRが2つ来るまで、細切れになってやってくるパケット
を自動的に継ぎ足す処理をして適切にトークンを返すような便利なクラスにしたいのです。
で、この高機能?なCTokenですが、IO機能がダブっているようであまり美しくない?気も
します。CTokenを設計するにあたり、次の2案のどちらが妥当なのでしょうか。
案1:
CHttpで生成されたCNetIOのインスタンスへのポインタをCTokenのインスタンス生成時に
引き渡してやればCTokenはCNetIOの機能を呼び出せるから、そうせよ。
案2:
プログラム的に同じ機能のルーチン(CNetIO)を別々のクラスで各々生成するのは美しくない。
CTokenはバッファの最後に到達したら適切にエラーを返し、それ以上の処理はやめるような
簡単な機能にとどめるべきだ。継ぎ足し処理はCHttp内で行え。
■ このスレッドは過去ログ倉庫に格納されています