雨谷の日和

過去12年で1,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

人狼BBS作成日記25

あー、プログラムのソースコードを見るのも久しぶりですねー。
ということで、人狼BBS作成日記19では「出力側はほとんど同じなので、説明は割愛します」とか書きましたが、思い出しついでに説明します。
読み込んだ変数の格納の仕方が異なるので、出力するときに参照する変数も異なってきます。
以下のようになります。

sub STDOUT_MSG {
  ($Msg_Type, $Msg_Char_Index, $Msg_Time, $Msg_Text) = split( /<>/, @Msg_Data[@_[0]] );
  ($Char_Name, $Char_Icon) = split( /<>/, @Char_Data[$Msg_Char_Index] );
  if( $Msg_Type < 80 ){
    print "<div class=\"cell\"><div class=\"char\">\n";
    print "<img class=\"char\" src=\"$Char_Icon\" width=\"50\" height=\"50\" alt=\"$Char_Name\"></div>\n";
    print "<div class=\"name\">$Char_Name [$Msg_Time]</div>\n";
    print "<div class=\"msg$Msg_Type\">$Msg_Text</div><br class=\"clear\"></div>\n";
    print "<br>\n";
  }else{
    print "<div class=\"cell\">\n";
    print "<div class=\"name\">システムメッセージ [$Msg_Time]</div>\n";
    print "<div class=\"msg$Msg_Type\">$Msg_Text</div><br class=\"clear\"></div>\n";
    print "<br>\n";
  }
}

ポイントは2行目で、Char_Dataという配列(キャラクターのデータ行を保持している)から、splitで「キャラクター名」「キャラクター画像URL」を切り出しているところになるでしょうか。
そのときに、メッセージデータ行から切り出したMsg_Char_Indexを、キャラクターデータの何番目なのかという値として使っています。
あとはまあ、同じですね→比較対象


※ちなみにこのデータフォーマットではまだまだ全然ダメなので、もっと考える必要があります。あと、ファイルのロックの取り扱いはもっと厳密にする必要があるでしょうね。読み込みと書き込みを別ロックにするのは、まずいような気がしています。でもすべての処理をアトミックに実装してしまうと、アクセスごとに起動するであろうプロセスがブロックされる可能性が高くなって、サーバ負荷が気になってくるんですよねー。どうしたもんか。