GJSのchrome/firefox拡張機能のためのnative messaging hostを書こうとしていますが(GJSですでに書かれたコードに依存しているため)、いくつかのハードルに遭遇しています。私はchrome-gnome-shellを粗いテンプレートとして使用しています。なぜならGLib/Gio instrospectionとGApplicationも使用しているからですが、私にはないPython struct
の利点があります。GJSでのネイティブメッセージングホストの作成
簡単に言えば、ネイティブメッセージングホストは、utf-8でエンコードされたJSONの文字列に続くInt32(4バイト)長のstdin/stdoutでメッセージを交換します。
chrome-gnome-shellは、GLib.IOChannel
とset_encoding('utf-8')
とstruct
を使用してint32バイトを処理します。私はGJSでそのクラスを使用する際に問題がありました。struct
を持っていないので、をGio.DataInputStream
(および出力する相手)に置き換えて試しています。put_int32()
/read_int32()
とput_string()
/read_string()
です。
明らかに私は自分がしていることについて大いに混乱しています。私がGio.DataInputStream.read_int32()
を呼び出すと、数値369098752
が返されるので、int32は通常の数値に変換されていないと推測しています。私がGio.DataInputStream.read_bytes(4, null).unref_to_array()
を呼び出してByteArrayを取得した場合、 ByteArray.toString()
は '\ u0016'を返し、ByteArray [0]は実際の長さのように見える '22'を返します。
int32をデータストリームに読み書きするためのいくつかのポインタであり、非常に感謝しています。
クロムGNOMEシェルの参照:
私は 'read_int32()'と 'put_int32()'を使ってみましたが、これらは標準のbase-10 javascript Numberとの間で変換されていないようですが、代わりに巨大な数値を返します。おそらくGJS/GIRのバグでしょうか? –
はい、バグのようです。バグトラッカーは現在gitlab.gnome.org/GNOME/gjsにあります – ptomato
きれいなコードハイライトともの;)ここでのバグ報告:https://gitlab.gnome.org/GNOME/gjs/issues/20 –