目次
WING 関係
WinGO(GTk WING クライアント)
NNGS プロトコル解析
NNGSライブラリ
Glib 関係
Glib Scanner
Gtk 関係
Widget作成法

libnngs

libnngsって

WING 用クライアントのプロトコルの解析部分だけをライブラリとして独立させたものです。 現在は単独でビルドできるようにはしてませんが、 そのうち単独で利用できるようになるかもしれません。 字句解析器は GlibScanner を使っているので、 glib が使える環境なら多少の変更で動くはずです。

まだ公開してないけど、自分用の覚え書きとしてこのページが存在してます。

使い方

nngs_parser_new() でパーサを作成して、 WING から送られてきた「行」を nngs_parser_inputl() に突っ込むと 適当にパースして「パケット」として出力します。 パケットは、現時点では以下のような構造体になっています (完成するころにはもっと複雑になるはず)。

 struct _NNGS_packet {
    gint type;          /* パケットタイプ */

    union {
       gpointer data;   /* 汎用ポインタ */
       gchar    *str;   /* 文字列 */
       gint     code;   /* エラーコード */
    } body;
 };
    

type を調べてから、type にあった形で body をアクセスすることで、 欲しい情報がさくっと手にはいるようになる予定です。

パケットの詳細

NNGS_PKT_INVAL

type
NNGS_PKT_INVAL
body
body.data = NULL

不正なパケット。 パケットを確保したが、なにも設定していない場合にこうなる。 これが見つかったらバグです。

NNGS_PKT_NULL

type
NNGS_PKT_NULL
body
body.data = NULL

パーサの内部状態が変更されたが、 クライアント本体でやるべきことは無いことを示すパケット。 nngs_parser_inputl() が NULL を返すのはパースエラーとして定義しているので、 それと区別するために利用している。 無視してよいです。

NNGS_PKT_BEEP

type
NNGS_PKT_BEEP
body
body.data = NULL

警告音を鳴らせ、という意味のパケット。 これを受け取ったら、なんらかの警告音をならすべし。

NNGS_PKT_FILE

type
NNGS_PKT_FILE
body
body.str = ファイルバッファへのポインタ

ファイルの受信が完了したという意味のパケット。 WING だと使わないと思われる。

NNGS_PKT_ERROR

type
NNGS_PKT_ERROR
body
body.str = エラー内容を示す文字列

エラーが発生したことを示すパケット。 パースエラーではなくて、NNGS サーバが返したエラー。 クライアントはエラー内容をユーザに提示すべし。