Files
2025-09-29 00:52:08 +02:00

206 lines
4.7 KiB
Ruby
Executable File

require 'mysql'
def with_db
#dbh = Mysql.real_connect('ediw-toolsb1','system','rdsgokuhero8e5rg','greg_smith_dev')
dbh = Mysql::new('ediw-toolsb1','system','rdsgokuhero8e5rg','greg_smith_dev')
begin
yield dbh
ensure
dbh.close
end
end
class DebugNode
attr_reader :type, :coord_x, :coord_y, :coord_z, :label, :creation_number, :box_index
attr_writer :type, :coord_x, :coord_y, :coord_z, :label, :creation_number, :box_index
end
#!/usr/bin/ruby -w
# chat.rb
require 'gserver'
class DebugNodeServer < GServer
def initialize(port=20606, host=GServer::DEFAULT_HOST)
@clients = []
super(port, host, Float::MAX, $stderr, true)
end
def init_system( msg )
puts("init")
with_db do |db|
db.query('create table DebugNodeMeta (version INTEGER)')
db.query('create table DebugNodeUser (id INTEGER PRIMARY KEY, name TEXT)')
db.query('create table DebugNodeSet (id INTEGER PRIMARY KEY, userid INTEGER REFERENCES DebugNodeUser(id) ON DELETE CASCADE, nodecount INTEGER, name TEXT, creation_num INTEGER, node_creation_num INTEGER)')
db.query('create table DebugNode (setid INTEGER REFERENCES DebugNodeSet(id) ON DELETE CASCADE, type INTEGER, coordx FLOAT, coordy FLOAT, coordz FLOAT, name TEXT, create_num INTEGER, box_index INTEGER)')
db.query('insert into DebugNodeUser(id, name) values (0, "Greg")')
end
end
def make_safe_label( str )
str.strip!
str = str[1...(str.size - 1)]
str.strip!
"'#{str}'"
end
def save_set( msg )
puts("save_set")
with_db do |db|
msgtoks = msg.split(',')
userid = msgtoks[1]
index = msgtoks[2]
nodes_size = msgtoks[3]
name = msgtoks[4]
creation_number = msgtoks[5]
node_creation_number = msgtoks[6].to_i
name = make_safe_label(name)
db.query("delete from DebugNodeSet where id = #{index}")
db.query("delete from DebugNode where setid = #{index}")
query = "insert into DebugNodeSet values (#{index}, #{userid}, #{nodes_size}, #{name}, #{creation_number}, #{node_creation_number})"
puts(query)
db.query(query)
array_index = 7
0.upto(node_creation_number - 1) { |i|
dn = DebugNode.new()
dn.type = msgtoks[array_index]
array_index = array_index + 1
dn.coord_x = msgtoks[array_index]
array_index = array_index + 1
dn.coord_y = msgtoks[array_index]
array_index = array_index + 1
dn.coord_z = msgtoks[array_index]
array_index = array_index + 1
dn.label = msgtoks[array_index]
array_index = array_index + 1
dn.creation_number = msgtoks[array_index]
array_index = array_index + 1
dn.box_index = msgtoks[array_index]
array_index = array_index + 1
dn.label = make_safe_label(dn.label)
query = "insert into DebugNode values (#{index}, #{dn.type}, #{dn.coord_x}, #{dn.coord_y}, #{dn.coord_z}, #{dn.label}, #{dn.creation_number}, #{dn.box_index})"
puts(query)
db.query(query)
}
end
end
def load_set( msg, sock )
puts("load_set")
msgtoks = msg.split(',')
userid = msgtoks[1]
index = msgtoks[2]
msg = "/loaded_set, "
with_db do |db|
db.query_with_result = true
res = db.query("select * from DebugNodeSet where id = #{index}")
res.each { |x|
x.each { |i| msg << "#{i}, " }
}
end
with_db do |db|
db.query_with_result = true
res = db.query("select * from DebugNode where setid = #{index}")
res.each { |x|
x[1...x.size].each { |i| msg << "#{i}, " }
}
end
puts("sending back...")
sock.print(msg)
#puts(msg)
end
def delete_set( msg )
puts("delete_set")
msgtoks = msg.split(',')
userid = msgtoks[1]
index = msgtoks[2]
with_db do |db|
db.query('delete from DebugNodeSet where id = #{index}')
db.query('delete from DebugNode where setid = #{index}')
end
end
def serve(sock)
begin
@clients << sock
hostname = sock.peeraddr[2] || sock.peeraddr[3]
until sock.eof? do
#while true do
message = sock.gets.chomp
msgtoks = message.split(',')
puts("#{msgtoks[0]}")
begin
case msgtoks[0]
when "/init" then init_system(message)
when "/save_set" then save_set(message)
when "/load_set" then load_set(message, sock)
when "/delete_set" then delete_set(message)
end
rescue
end
end
rescue
puts("there was an exception")
ensure
@clients.delete(sock)
end
end
end
server = DebugNodeServer.new(20606,"EDIW-GSMITH.rockstar.t2.corp")
server.start(-1)
server.join