working prototype

This commit is contained in:
Mewrry the Kitty 2026-01-31 00:37:01 -06:00
commit 880e85f12d
2 changed files with 115 additions and 0 deletions

79
server.rb Normal file
View file

@ -0,0 +1,79 @@
#!/usr/bin/env ruby
require 'socket'
PORT = 6789
ROWS = 24
COLS = 40
VERSION = 0.01
server = TCPServer.new(PORT)
sockets = [server]
puts "PORT: #{PORT}"
puts 'Listening...'
buffer = ' '*ROWS*COLS
cont = 0
def new_buf_cont_out(buf, count, newtext)
buf = buf.dup
out = ''
nti = 0 # New Text Index
while nti < newtext.length
out << "#{VERSION}|"
out << ((count/COLS)+1).to_s + '|'
out << ((count%COLS)+1).to_s + '|'
loop do
out << newtext[nti]
buf[count] = newtext[nti]
count += 1
nti += 1
break if nti >= newtext.length
break if count%COLS == 0
end
count = 0 if count >= (ROWS*COLS)
out << "\n"
end
return [buf, count, out]
end
loop do
ready, = IO.select(sockets)
newtext = ''
ready.each do |sck|
if sck == server
client = server.accept
sockets << client
puts "Connection: #{client.peeraddr}"
client.puts new_buf_cont_out(buffer,0,buffer)[2]
client.puts new_buf_cont_out(buffer,cont-1,'')[2]
next
end
begin
msg = sck.gets
unless msg
puts "Disconnect: #{sck.peeraddr}"
sck.close
sockets.delete(sck)
next
end
ver, msg = msg.chomp.split('|',2)
next unless ver.to_f <= VERSION
next unless msg != nil
newtext << msg
rescue Errno::ECONNRESET, Errno::EPIPE
puts "Disconnect (err): #{sck.peeraddr}"
sck.close
sockets.delete(sck)
end
buffer, cont, out = new_buf_cont_out(buffer,cont,newtext)
clients = sockets - [server]
clients.each { |c| c.puts out }
#if out != ''
# puts "#{cont}: (#{(cont/COLS)+1},#{(cont%COLS)+1})"
#end
end
end