Class: Rubame::Server
- Inherits:
-
Object
- Object
- Rubame::Server
- Defined in:
- lib/rubame/rubame.rb
Instance Method Summary collapse
- #accept ⇒ Object
- #close(client) ⇒ Object
-
#initialize(host, port) ⇒ Server
constructor
A new instance of Server.
- #read(client) ⇒ Object
- #run(&blk) ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(host, port) ⇒ Server
Returns a new instance of Server
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/rubame/rubame.rb', line 6 def initialize(host, port) Socket.do_not_reverse_lookup @hostname = host @port = port @reading = [] @writing = [] @clients = {} # Socket as key, and Client as value @socket = TCPServer.new(@hostname, @port) @reading.push @socket end |
Instance Method Details
#accept ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/rubame/rubame.rb', line 20 def accept socket = @socket.accept_nonblock @reading.push socket handshake = WebSocket::Handshake::Server.new client = Rubame::Client.new(socket, handshake, self) while line = socket.gets client.handshake << line break if client.handshake.finished? end if client.handshake.valid? @clients[socket] = client client.write handshake.to_s client.opened = true return client else close(client) end return nil end |
#close(client) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/rubame/rubame.rb', line 65 def close(client) @reading.delete client.socket @clients.delete client.socket begin client.socket.close rescue end client.closed = true end |
#read(client) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rubame/rubame.rb', line 41 def read(client) pairs = client.socket.recvfrom(2000) = [] if pairs[0].length == 0 close(client) else client.frame << pairs[0] while f = client.frame.next if (f.type == :close) close(client) return else .push f end end end return end |
#run(&blk) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/rubame/rubame.rb', line 75 def run(&blk) readable, writable = IO.select(@reading, @writing, nil, 1) if readable readable.each do |socket| client = @clients[socket] if socket == @socket client = accept else msg = read(client) client. = msg end blk.call(client) if client and blk end end end |
#stop ⇒ Object
93 94 95 |
# File 'lib/rubame/rubame.rb', line 93 def stop @socket.close end |