(>>950の続き)

RecvAcceptorState state = STATE_WAIT_TYPE; // 初期状態はType待ち

void recv_acceptor() // recvイベント発生に呼ばれるコールバック関数
{
 while (buf.size() > 0) {
  byte = buf.pop(1)
  switch (state) {
  case STATE_WAIT_TYPE: // Type待ち状態
   tlv.type = byte; // Type値が決定
   state = STATE_WAIT_LEGTH; // 次の状態(Length待ち)へ遷移
   break;
  case STATE_WAIT_LENGTH: // Length待ち状態
   tlv.length = byte; // Length値が決定(Lengthフィールドが1byte固定である事を仮定)
   value_counter = tlv.length; // 受信カウンタをLength値で初期化
   state = STATE_PROCESS_VALUE; // 次の状態(Value処理中)へ遷移
   break;
  case STATE_PROCESS_VALUE: // Value処理中状態
   :
   if (メッセージ組立て完了) {
    : // 受信メッセージ処理のアクションを起動する
    : // もし階層的なTLV構造であれば、>>947のメッセージ解析処理を呼ぶ
    state = STATE_WAIT_TYPE; // 初期状態へ遷移(必要であれば他の再初期化処理も)
   }
   :
   break;
  }
 }
}

(更に続く)