mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-15 15:52:34 +00:00
68 lines
2.0 KiB
Ruby
68 lines
2.0 KiB
Ruby
class IMICRTS
|
|
# {IMICRTS::Connection} is the abstract middleman that Director sends/receives Orders from.
|
|
# not to be confused with {IMICRTS::Networking::Connection}
|
|
class Connection
|
|
# Connection modes:
|
|
# :virtual => emulates networking without sockets (used for solo play)
|
|
# :host => starts server
|
|
# :client => connects to server/host
|
|
def initialize(director:, mode:, hostname: "localhost", port: 56789)
|
|
@director = director
|
|
@mode = mode
|
|
@hostname = hostname
|
|
@port = port
|
|
|
|
@pending_orders = []
|
|
|
|
case @mode
|
|
when :virtual
|
|
when :host
|
|
@server = Networking::Server.new(director: @director, hostname: @hostname, port: @port)
|
|
|
|
@connection = Networking::Connection.new(director: @director, hostname: @hostname, port: @port)
|
|
when :client
|
|
@connection = Networking::Connection.new(director: @director, hostname: @hostname, port: @port)
|
|
else
|
|
raise RuntimeError, "Unable to process Connection of type: #{@mode.inspect}"
|
|
end
|
|
end
|
|
|
|
def add_order(order)
|
|
@pending_orders.push(order)
|
|
end
|
|
|
|
def update
|
|
# data = @pending_orders.sort_by { |order| order.tick_id }.map do |order|
|
|
|
|
# # Order serialized size in bytes + serialized order data
|
|
# pp order.serialized_order
|
|
# [order.serialized_order.length].pack("n") + order.serialized_order
|
|
# end.join
|
|
|
|
if @mode == :virtual
|
|
else
|
|
@pending_orders.each do |order|
|
|
# TODO: make this include order_id and tick_id
|
|
@server.broadcast(order.serialized_order) if @server
|
|
@connection.write(order.serialized_order) unless @server
|
|
|
|
@pending_orders.delete(order)
|
|
end
|
|
end
|
|
|
|
case @mode
|
|
when :virtual
|
|
when :host
|
|
@server.update
|
|
@connection.update
|
|
when :client
|
|
@connection.update
|
|
end
|
|
end
|
|
|
|
def finalize
|
|
@server.stop if @server
|
|
@connection.close if @connection
|
|
end
|
|
end
|
|
end |