2023-09-19 22:54:58 -06:00
|
|
|
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
|