ネットワークプログラミング相談室 Port24
レス数が900を超えています。1000を超えると表示できなくなるよ。
0931デフォルトの名無しさん
2009/10/09(金) 16:34:18擬似コードを以下に。
// フレームワーク側で、recvイベントが発生した際に呼ばれる関数。
// 受信したデータがbufにバッファリングされてる
void F(buffer &buf){
if(buf.size()==0) return;
// TLV形式で、Typeを取ってくる
switch(buf[0]){
case MAP_DATA:
if(buf.size()<5) return;
size_t len = *(size_t*)(&buf[1]);
// TLを読み込んだ時点で、読み込んだサイズ分、bufからpopする
buf.pop(5);
// (*ここで質問)データを処理する
// len分データが届いていなかったら、届いてる分だけ処理してreturnする
}
こういうコードの場合、len分データが届いてなかったらreturnして、またFが呼ばれるのを待つんだけど、
次にFが呼ばれた場合、TLの解析は飛ばして、(*ここで質問)から処理を再開させたい
んだけど、coroutineとかステートパターンみたいなことを駆使しなきゃダメなの?
それとももっと別の"データを処理するためのコーディング方法/パラダイム"みたいなものがあるの?
レス数が900を超えています。1000を超えると表示できなくなるよ。