Skip to content

Instantly share code, notes, and snippets.

@tonytonyjan
Created March 23, 2016 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tonytonyjan/82bb5af402a06f57d67d to your computer and use it in GitHub Desktop.
Save tonytonyjan/82bb5af402a06f57d67d to your computer and use it in GitHub Desktop.
Simple thread based chat server
require 'socket'
class Client
def initialize server, socket
@server, @socket = server, socket
start
end
def send message
@socket.puts message
end
def start
Thread.new do
@socket.puts "Hi, what's your name?"
username = @socket.gets.chomp
@server.broadcast "#{username} joined"
while recv = @socket.gets
msg = "#{username}: #{recv.chomp}"
puts msg
@server.broadcast msg
end
@server.kick self
@server.broadcast "#{username} left"
end
end
end
class Server
def initialize
@clients = []
@server = TCPServer.new 2000
end
def kick client
@clients.delete client
end
def broadcast message
@clients.each do |client|
client.send message
end
end
def start
puts "Server start listening on port #{@server.addr[1]}, waiting for connections..."
loop do
socket = @server.accept
address_family, port, hostname, numeric_address = socket.peeraddr
puts "Connected from #{numeric_address}:#{port}"
@clients << Client.new(self, socket)
end
end
end
Server.new.start
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment