Created
March 31, 2016 00:25
-
-
Save scalone/9e7ddee98432f89a042bc1ec62ea2a20 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Device | |
class Transaction | |
class Download | |
def perform(socket_proc, company_name, remote_path, filepath, current_app, logical_number, file_crc = nil, socket_call = true) | |
if socket_call | |
@socket, @buffer, @request, @first_packet = socket_proc.call, "", "", "" | |
else | |
@socket, @buffer, @request, @first_packet = socket_proc, "", "", "" | |
end | |
@crc = file_crc ? file_crc : generate_crc(filepath) | |
key = "#{company_name}_#{remote_path}" | |
ei_encode_version # version | |
ei_encode_list_header(3) # mapreduce with 3 tuples | |
ei_encode_tuple_header(2) # tuple 1 inputs | |
ei_encode_atom("inputs") # atom inputs | |
ei_encode_list_header(1) # list inputs | |
ei_encode_tuple_header(2) # tuple contendo 2 elementos binarios, bucket and key | |
ei_encode_binary("assets") # elemento binario bucket | |
ei_encode_binary(key) # elemento binario key | |
ei_encode_list_header(0) # fim da list do inputs | |
ei_encode_tuple_header(2) # tuple 2: query | |
ei_encode_atom("query") # atom query | |
ei_encode_list_header(1) # list da query | |
ei_encode_tuple_header(4) # tuple contendo 4 elementos, { map, {modfun,Module,Function}, args, true } | |
ei_encode_atom("map") # primeiro elemento, atom type | |
ei_encode_tuple_header(3) # segundo elemento, nova tuple contendo 3 atoms | |
ei_encode_atom("modfun") # primeiro atom do segundo elemento, modfun | |
ei_encode_atom("walk") # segundo atom do segundo elemento, Module | |
ei_encode_atom("get_asset") # terceiro atom do segundo elemento, Function | |
ei_encode_list_header(7) # terceiro elemento, uma list com parametros do walk | |
ei_encode_binary(@serial) # elemento binario serialterminal | |
ei_encode_binary(@version) # elemento binario versao walk | |
ei_encode_binary(remote_path) # elemento binario nomeaplicativo | |
ei_encode_binary(@crc) # elemento binario crc aplicativo | |
ei_encode_binary("") # elemento binario buffer do posxml | |
ei_encode_binary(logical_number) # elemento binario numero do terminal | |
ei_encode_binary(current_app) # elemento binario nome do aplicativo que esta sendo executado | |
ei_encode_list_header(0) # fim da list com parametros do walk | |
ei_encode_atom("true") # quarto elemento, atom true | |
ei_encode_list_header(0) # fim da list da query | |
ei_encode_tuple_header(2) # tuple 3: timeout | |
ei_encode_atom("timeout") # atom timeout | |
ei_encode_long(5000) # integer timeout | |
ei_encode_list_header(0) # fim da list do mapreduce contendo 3 tuples | |
mount_request # add request to protocol buffers message | |
return COMMUNICATION_ERROR unless @socket | |
# Send Request | |
socket.write(@request) | |
return COMMUNICATION_ERROR if (response_size = get_response_size(socket.read(4))) <= 0 | |
return MAPREDUCE_RESPONSE_ERROR unless @first_packet = get_binary_term_beginning(response_size) | |
return_code = @first_packet[7].to_s.unpack("C*").first | |
file_size = @first_packet[9..12].to_s.unpack("N*").first | |
if return_code != FILE_NOT_CHANGE | |
return IO_ERROR if (partial_download_to_store(filepath, response_size, file_size) < 0) | |
end | |
# receive 6A | |
@socket.read(1) if response_size > 1024 | |
if socket_call | |
@socket.close unless @socket.closed? | |
end | |
return_code | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment