1

私は現在 Source Engine プロトコルに取り組んでおり、将来の Rails プロジェクトで使用するためにライブラリを作成/移植しています。

私の質問は...この参考資料では、null で終わる文字列について述べています (これは常に '\0' だと思っていました)。

私が書いたこのライブラリ (関連するセグメントを添付) をテストしようとすると、機能しません。IRB では、null 終端が \u0000 (ユニコード) に変換されるためです。UDP パケットで送信されるデータを処理するためにこれを修正するにはどうすればよいですか? 問題はエンコーディングに関連していると思います。

# Get a null ('/0') terminated string from the buffer.
  def get_string

    zero_byte = @buffer.index('\0',@position)

    if zero_byte === nil
      string = ''
    else
      string = get(zero_byte-@position)
      @position+=1
    end

    string

  end

基本的に、「ヌル」文字を見つけて、そのデータのチャンクを取得して文字列として返し、バッファ内の「位置」をヌル文字に移動して、さらに読み取れるようにすることになっています。

これを ERB で実行すると、次のようになります。

2.0.0-p247 :001 > load 'source_buffer.rb'
 => true 
2.0.0-p247 :002 > b = SourceBuffer.new
 => #<SourceBuffer:0x000000023d56d8> 
2.0.0-p247 :003 > b.set("Source Engine Query\0")
 => 0 
2.0.0-p247 :004 > b.get_string
 => "" 
2.0.0-p247 :005 > b.buffer
 => "Source Engine Query\u0000"

ご覧のとおり、バッファーに入れた '\0' は Unicode に変換されており、これが IRB テストに違反しています。

これは、すべてが完了したときに次のプロトコルで使用されますが、現時点ですぐに関連するかどうかはわかりません。

https://developer.valvesoftware.com/wiki/Server_queries

とにかく、どんな助けでも大歓迎です。これを読んでくれた皆さん、どうもありがとう。

4

0 に答える 0