RepoQuest-Server/lib/repoquest_server.rb
2023-09-19 22:54:58 -06:00

71 lines
1.8 KiB
Ruby

require 'websocket-eventmachine-server'
require 'sequel'
require 'json'
require_relative 'database/models/player'
require_relative 'database/models/repo'
module RepoQuest
class Server
def initialize(port, db_connector)
@port = port
@db_connector = db_connector
@db = @db_connector.db # Assuming you have a method in db_connector that returns the Sequel database object
end
def start
EM.run do
WebSocket::EventMachine::Server.start(host: '0.0.0.0', port: @port) do |ws|
ws.onopen do
puts 'Client connected'
end
ws.onmessage do |msg|
Fiber.new do
handle_message(msg, ws)
end.resume
end
ws.onclose do
puts 'Client disconnected'
end
end
end
end
private
def handle_message(message, _ws)
parsed_data = JSON.parse(message)
user_id = parsed_data['user_id']
xp_gained = parsed_data['xp_gained']
repo_pushed_to = parsed_data['repo_pushed_to']
if user_id && xp_gained && repo_pushed_to
update_player_info(user_id, xp_gained)
update_repo_info(repo_pushed_to)
else
puts 'Invalid data received.'
end
rescue JSON::ParserError => e
puts "Error parsing JSON: #{e.message}"
end
def update_player_info(user_id, xp_gained)
player = Player.where(player_id: user_id).first
if player
player.update(player_level: player.player_level + xp_gained,
times_gained_xp: player.times_gained_xp + 1)
else
puts "Player with ID #{user_id} not found."
end
end
def update_repo_info(repo_pushed_to)
repo = Repo.where(repo_link: repo_pushed_to).first
return if repo
Repo.create(repo_link: repo_pushed_to)
end
end
end