require 'socket'
require File.expand_path('../parser.rb', __FILE__)

def pack_int(i)
    bytes = []; mask = 255

    while bytes.length < 4
        bytes.unshift (i & mask)
        i = i >> 8
    end

    return bytes.pack('cccc')
end


def start_server(port_number)
    server = TCPServer.new port_number
    puts "Ruby Server listening on port #{port_number}\n"

    loop do
        # Start a new thread for each client accepted
        Thread.start(server.accept) do |client|
            begin
                # Get the amount of data to be read
                size = (client.readline).to_i
                p = Bitshift::Parser.new client.read(size)
                # Get the parsed result
                symbols = p.parse
                client.puts pack_int(symbols.length)
                client.puts symbols
            ensure
                # Close the socket
                client.close
            end
        end
    end
end
