Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
68
Task/Chat-server/Ruby/chat-server.rb
Normal file
68
Task/Chat-server/Ruby/chat-server.rb
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
require 'gserver'
|
||||
|
||||
class ChatServer < GServer
|
||||
def initialize *args
|
||||
super
|
||||
|
||||
#Keep a list for broadcasting messages
|
||||
@chatters = []
|
||||
|
||||
#We'll need this for thread safety
|
||||
@mutex = Mutex.new
|
||||
end
|
||||
|
||||
#Send message out to everyone but sender
|
||||
def broadcast message, sender = nil
|
||||
#Need to use \r\n for our Windows friends
|
||||
message = message.strip << "\r\n"
|
||||
|
||||
#Mutex for safety - GServer uses threads
|
||||
@mutex.synchronize do
|
||||
@chatters.each do |chatter|
|
||||
begin
|
||||
chatter.print message unless chatter == sender
|
||||
rescue
|
||||
@chatters.delete chatter
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#Handle each connection
|
||||
def serve io
|
||||
io.print 'Name: '
|
||||
name = io.gets
|
||||
|
||||
#They might disconnect
|
||||
return if name.nil?
|
||||
|
||||
name.strip!
|
||||
|
||||
broadcast "--+ #{name} has joined +--"
|
||||
|
||||
#Add to our list of connections
|
||||
@mutex.synchronize do
|
||||
@chatters << io
|
||||
end
|
||||
|
||||
#Get and broadcast input until connection returns nil
|
||||
loop do
|
||||
message = io.gets
|
||||
|
||||
if message
|
||||
broadcast "#{name}> #{message}", io
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
broadcast "--+ #{name} has left +--"
|
||||
end
|
||||
end
|
||||
|
||||
#Start up the server on port 7000
|
||||
#Accept connections for any IP address
|
||||
#Allow up to 100 connections
|
||||
#Send information to stderr
|
||||
#Turn on informational messages
|
||||
ChatServer.new(7000, '0.0.0.0', 100, $stderr, true).start.join
|
||||
Loading…
Add table
Add a link
Reference in a new issue