⇤ ← 2012-08-23 19:39:31時点のリビジョン1
サイズ: 2024
コメント:
|
← 2012-08-23 19:42:03時点のリビジョン2 ⇥
サイズ: 2080
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 12: | 行 12: |
{{{#!highlight ruby | |
行 19: | 行 20: |
}}} | |
行 30: | 行 32: |
{{{#!highlight ruby |
|
行 59: | 行 63: |
}}} |
WEBrick::GenericServerの動作
リファレンスには使い方ほとんど乗ってないので使い方の説明。 ただし僕もリファレンス読んで多少使ってソースの関係有そうなところ見た程度なので大した内容はかけないし正確じゃないかもしれない。あしからず。
1. とりあえずWEBrick::GenericServerを継承したクラスを作る。走らせるのはこのクラスのインスタンス。
2. WEBrick::GenericServerを継承して作ったクラスにrunメソッドを定義する。runメソッドはTCPSocketを引数にとる。
こんな感じ。
あとはServer.newして返ってきたインスタンスのstartインスタンスメソッド呼ぶだけ。 WEBrick::GenericServerのイニシャライザはHashを引数にとる。これの:Port要素にポート番号を指定しないと動かないので注意。
実際に接続した時のWEBrick::GenericServerのサブクラスは以下のように動作する
クライアントA(仮)が接続 ー> Threadを作成 ー> 作成したThreadでrunが呼ばれる。runに与える引数はAと通信するTCPSocket
頑張ればチャットサーバーとして使えなくもないサーバー
使うにはtelnetで6667番ポートに接続する。ちなみに6667番ポートはIRCがよく使うポート。
1 require 'webrick/server'
2
3 class Server < WEBrick::GenericServer
4
5 def initialize(config={:Port => 6667})
6 @clients = []
7 super(config)
8 Signal.trap(:INT) do
9 exit!
10 end
11 end
12
13 def run(socket)
14 @clients << socket
15 socket.print('What is your name?: ')
16 nick = socket.gets.chomp
17 loop do
18 s = socket.gets
19 puts("#{nick}: #{s}")
20 @clients.each do |client|
21 client.puts("#{nick}: #{s}")
22 end
23 end
24 end
25
26 end
27
28 Server.new.start