mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
import drb/sample
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@5698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
2766990624
commit
a686414ef5
44 changed files with 1966 additions and 0 deletions
71
sample/drb/dchats.rb
Normal file
71
sample/drb/dchats.rb
Normal file
|
@ -0,0 +1,71 @@
|
|||
=begin
|
||||
distributed Ruby --- chat server
|
||||
Copyright (c) 1999-2000 Masatoshi SEKI
|
||||
=end
|
||||
require 'thread'
|
||||
require 'drb/drb'
|
||||
|
||||
class ChatEntry
|
||||
include DRbUndumped
|
||||
|
||||
def initialize(server, there)
|
||||
@server = server
|
||||
@there = there
|
||||
@name = there.name
|
||||
@key = there.key = Time.now
|
||||
end
|
||||
attr :name, true
|
||||
attr :there
|
||||
|
||||
def say(str)
|
||||
@server.distribute(@there, str)
|
||||
end
|
||||
|
||||
def listen(str)
|
||||
@there.message(@key, str)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class ChatServer
|
||||
def initialize
|
||||
@mutex = Mutex.new
|
||||
@members = {}
|
||||
end
|
||||
|
||||
def add_member(there)
|
||||
client = ChatEntry.new(self, there)
|
||||
@mutex.synchronize do
|
||||
@members[there] = client
|
||||
end
|
||||
client
|
||||
end
|
||||
|
||||
def distribute(there, str)
|
||||
name = @members[there].name
|
||||
msg = "<#{name}> #{str}"
|
||||
msg2 = ">#{name}< #{str}"
|
||||
@mutex.synchronize do
|
||||
for m in @members.keys
|
||||
begin
|
||||
if m == there
|
||||
@members[m].listen(msg2)
|
||||
else
|
||||
@members[m].listen(msg)
|
||||
end
|
||||
rescue
|
||||
p $!
|
||||
@members.delete(m)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if __FILE__ == $0
|
||||
here = ARGV.shift
|
||||
DRb.start_service(here, ChatServer.new)
|
||||
puts DRb.uri
|
||||
puts '[return] to exit.'
|
||||
gets
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue