-
Notifications
You must be signed in to change notification settings - Fork 0
/
tcp-server.rb
55 lines (42 loc) · 1.22 KB
/
tcp-server.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
require 'socket'
require 'json'
# Attempt to read and parse the configuration file
config = JSON.parse(File.read('server-config.json'))
# Extract configuration values
$server_name = config['servername']
PORT = config['port']
# Initialize the server and client list
server = TCPServer.open(PORT)
clients = []
puts "Server started on port #{PORT}..."
loop do
client = server.accept
clients << client
puts "Client connected."
Thread.start(client) do |client_conn|
begin
srv_name = "TCP Test Server"
client_conn.puts "Hello, welcome to #{srv_name}"
loop do
msg = client_conn.gets&.chomp
break if msg.nil? || msg == "exit"
clients.each do |c|
begin
c.puts msg unless c == client_conn
rescue Errno::EPIPE, IOError => e
puts "Error: #{e.message}. Removing client."
clients.delete(c)
c.close
end
end
end
rescue Errno::EPIPE, IOError => e
puts "Error: #{e.message}. Client disconnected unexpectedly."
ensure
clients.delete(client_conn)
client_conn.puts "[TCP Server] Server shut down!" rescue nil
client_conn.close
puts "Client disconnected."
end
end
end