ピュアP2Pもどきチャット できたよー\(^o^)/
[id:codnote:20080420:1240191154]で遊びのつもりだったのに完成してしまった。
ちなみに完全自力でスクラッチ。まずはソースをば。
ソース
保存は右にある「view raw」を右クリック>保存でOK.
ライセンス
ライセンスはいつも通りCreative commonsで
この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。
クレジット:Sora Harakami(http://d.hatena.ne.jp/codnote)
変更して公開したりした場合はコメント欄に書くかメールをください!!(できれば)
おことわり
なんか一つのノード(接続してる人)が消えると、
そのノードにつないでる人が送信できなくなるという変なことが起こります。現在絶賛修正中ですので、修正したらまたここにかきます。
準備
ターミナルの文字コードはUTF-8にして、
初期ノード用ファイルを準備します。
initseed_ポート番号.txt
これ重要です。ちなみに標準だとid:qnighyの例にそって18782(イヤな奴)です。
ファイルに書き込む形式は
アドレスまたはIPアドレス:ポート番号
です。複数指定できます。改行区切りです。
ファイルがないとエラーがでて終了します。
準備その2〜ローカルでテストする方法〜
initseedのファイルを複数用意します。すべてポート番号はずらしてください。
20000とか20001とか20002とかで。
あとどれか一つのポート用ファイルは空のファイルで。
起動してみる
$ ruby rubyp2p.rb ポート番号 nick
これおkです。nickにはニックネーム。チャットで使うものを。
んで、まずは初期ノード(ファイルを空にしたポートの奴か、ファイルを空にした人)を起動します。
info>My port is 20004 info> My initseed is:[] info> Server started.... info>Join to P2P Network... info>P2P Network joined
これで準備はおk。後の2つを起動します。
info>My port is 20003 info> My initseed is:[["127.0.0.1", 20004]] info> Server started.... info>Join to P2P Network... info>Connecting to 127.0.0.1:20004 .... info>Waiting for "reg_ok" .... info>Loop count: 0 info>127.0.0.1:20004 is registed info>P2P Network joined
info>My port is 20018 info> My initseed is:[["127.0.0.1", 20004]] info> Server started.... info>Join to P2P Network... info>Connecting to 127.0.0.1:20004 .... info>Waiting for "reg_ok" .... info>Loop count: 0 info>127.0.0.1:20004 is registed info>P2P Network joined
2つを起動すると、初期ノードの画面では・・・
info>My port is 20004 info> My initseed is:[] info> Server started.... info>Join to P2P Network... info>P2P Network joined info>localhost(127.0.0.1) is accepted info>localhost(127.0.0.1):20003 is registed info>localhost(127.0.0.1) is accepted info>localhost(127.0.0.1):20018 is registed
うまく認識されてますね
では入力してenterしてみましょう
こんにちはこんにちは! hage: こんにちはこんにちは!
ほかのノードでもおなじものがでているはずです。
では別のノードでも打ってみます。
まあご想像通りなんですが
hage: こんにちはこんにちは! hoge: これがP2Pなんですね、わかりま(ry bage: うはwwww bage: でもbなんか左カーソルキーがうまくうごかなくね? hoge: マジだ hage: ほんとだ hoge: 勝手に終了してみる info>localhost(127.0.0.1) is gone
hage-hoge-bage hage-(いない)-bage
こんな感じで接続されているので、hogeが終了したせいで通じなくなりました。
だから複数ノードを指定しておくと幸せ?
まあこんなもんです。ソースも汚いしなあ・・・。
id:rosylillyはrubyっぽくないとか言っていた。