= メモ

== 接続状態を保持する

保持できるようにしたい情報

  * nick

  * username

  * 接続しているサーバ(とポート)

  * 接続時(NICK, PASS, USERの後)にサーバから送られてきたメッセージ

  * joinしているチャネル

== チャネルの状態を保持(トラック)するモジュール

保持したい情報。

  * チャネルのモード

  * チャネルにいる人

  * どの人が@を持っているか

== 参加者の状態を保持(トラック)するモジュール

保持したい情報。

  * その時のnickと過去のnick

  * username

  * 接続元ホストとユーザ名

  * 最後の発言とその時刻

== 実装について

  * 書き出しの方はQueueを使わず、Socketオブジェクトそのものを
    扱うようにしてはどうだろう?

      * Queueを経由しまくると遅くなるようだ。
        ホントにQueueのせいか?

      * Connection#pushを変更。@write_thの廃止。…くらいか。
        やってみようか。

        →やってみた。多少ましになった気がする。
	(2001-06-05)

== スレッドその他について

  * RubyのQueueで同期をとろうとするとdead lockになりやすい?

  * ゆえに、終了処理をするスレッドを動かすタイミングを取るために
    Queueを使うなんてのはあまりよろしくないようだ。

    そのようなスレッドではThread.stopさせておいて、
    他スレッドからrunさせてやるのがよさげ。

  * initializeあたりで@client_th = Thread.currentしておいて
    終了処理の中で@client_th.raise(...)するというのもよさげ。

    特にInterrupt入ったときなどに有効。
