Class: ASIR::Transport::File
- Inherits:
-
Stream
- Object
- ASIR::Transport
- Stream
- ASIR::Transport::File
- Includes:
- PayloadIO
- Defined in:
- lib/asir/transport/file.rb
Overview
!SLIDE File Transport
Send Message to a file. Can be used as a log or named pipe service.
Constant Summary
Constants included from PayloadIO
PayloadIO::FOOTER, PayloadIO::HEADER
Constants included from ASIR::ThreadVariable
ASIR::ThreadVariable::DEBUG, ASIR::ThreadVariable::EMPTY_HASH, ASIR::ThreadVariable::SETTER
Instance Attribute Summary collapse
-
#file ⇒ Object
Returns the value of attribute file.
-
#mode ⇒ Object
Returns the value of attribute mode.
-
#perms ⇒ Object
Returns the value of attribute perms.
-
#result_fifo ⇒ Object
Returns the value of attribute result_fifo.
-
#result_file ⇒ Object
Returns the value of attribute result_file.
-
#stream ⇒ Object
!SLIDE File Transport Support.
Attributes inherited from ASIR::Transport
#after_invoke_message, #after_receive_message, #before_send_message, #coder_needs_result_message, #decoder, #encoder, #invoker, #message_count, #needs_message_identifier, #needs_message_timestamp, #on_exception, #on_result_exception, #one_way, #running, #verbose
Attributes included from Log
Instance Method Summary collapse
- #_receive_message(state) ⇒ Object
-
#_receive_result(state) ⇒ Object
Receive result from result_file.
- #_send_message(state) ⇒ Object
-
#_send_result(state) ⇒ Object
Send result to result_file.
-
#initialize(opts = nil) ⇒ File
constructor
A new instance of File.
- #needs_message_identifier?(m) ⇒ Boolean
-
#prepare_server! ⇒ Object
(also: #prepare_pipe_server!)
!SLIDE Named Pipe Server.
- #run_server! ⇒ Object (also: #run_pipe_server!)
-
#send_message(message) ⇒ Object
If not one_way, create a result_file fifo.
-
#serve_file! ⇒ Object
!SLIDE Process (receive) messages from a file.
- #with_result_file(state) ⇒ Object
Methods included from PayloadIO
#_read, #_read_line_and_expect!, #_write, #close
Methods inherited from Stream
#_serve_stream!, #serve_stream!, #serve_stream_message!, #stream_eof?
Methods inherited from ASIR::Transport
#_after_invoke_message, #_subclass_responsibility, #invoke_message!, #needs_message_timestamp?, #receive_message, #receive_result, #send_result, #serve_message!, #stop!, #with_force_stop!, #with_server_signals!
Methods included from Log
#_log, #_log_enabled=, #_log_enabled?, #_log_format, #_log_result, enabled, enabled=, included
Methods included from AdditionalData
#[], #[]=, #_additional_data, #additional_data, #additional_data!, #additional_data=, included
Methods included from Message::Delay
#relative_message_delay!, #wait_for_delay!
Methods included from ASIR::ThreadVariable
Constructor Details
#initialize(opts = nil) ⇒ File
Returns a new instance of File.
17 |
# File 'lib/asir/transport/file.rb', line 17 def initialize opts = nil; @one_way = true; super; end |
Instance Attribute Details
#file ⇒ Object
Returns the value of attribute file.
14 15 16 |
# File 'lib/asir/transport/file.rb', line 14 def file @file end |
#mode ⇒ Object
Returns the value of attribute mode.
14 15 16 |
# File 'lib/asir/transport/file.rb', line 14 def mode @mode end |
#perms ⇒ Object
Returns the value of attribute perms.
14 15 16 |
# File 'lib/asir/transport/file.rb', line 14 def perms @perms end |
#result_fifo ⇒ Object
Returns the value of attribute result_fifo.
15 16 17 |
# File 'lib/asir/transport/file.rb', line 15 def result_fifo @result_fifo end |
#result_file ⇒ Object
Returns the value of attribute result_file.
15 16 17 |
# File 'lib/asir/transport/file.rb', line 15 def result_file @result_file end |
#stream ⇒ Object
!SLIDE File Transport Support
83 84 85 |
# File 'lib/asir/transport/file.rb', line 83 def stream @stream end |
Instance Method Details
#_receive_message(state) ⇒ Object
46 47 48 |
# File 'lib/asir/transport/file.rb', line 46 def state state. = _read(state.in_stream || stream, state) end |
#_receive_result(state) ⇒ Object
Receive result from result_file.
60 61 62 63 64 65 66 |
# File 'lib/asir/transport/file.rb', line 60 def _receive_result state with_result_file state do | result_file | ::File.open(result_file, "r") do | stream | state.result_payload = _read(stream, state) end end end |
#_send_message(state) ⇒ Object
40 41 42 43 44 |
# File 'lib/asir/transport/file.rb', line 40 def state _write(state., state.out_stream || stream, state) ensure close if file && ::File.pipe?(file) end |
#_send_result(state) ⇒ Object
Send result to result_file.
51 52 53 54 55 56 57 |
# File 'lib/asir/transport/file.rb', line 51 def _send_result state with_result_file state do | result_file | ::File.open(result_file, "a+") do | stream | _write(state.result_payload, stream, state) end end end |
#needs_message_identifier?(m) ⇒ Boolean
76 77 78 |
# File 'lib/asir/transport/file.rb', line 76 def m || ! one_way || ! m.one_way end |
#prepare_server! ⇒ Object Also known as: prepare_pipe_server!
!SLIDE Named Pipe Server
106 107 108 109 110 |
# File 'lib/asir/transport/file.rb', line 106 def prepare_server! unless ::File.exist? file ::ASIR::Fifo.mkfifo(file, perms) end end |
#run_server! ⇒ Object Also known as: run_pipe_server!
113 114 115 116 117 118 119 120 |
# File 'lib/asir/transport/file.rb', line 113 def run_server! with_server_signals! do @running = true while @running serve_file! end end end |
#send_message(message) ⇒ Object
If not one_way, create a result_file fifo.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/asir/transport/file.rb', line 20 def result_file_created = false unless one_way || .one_way result_file = [:result_file] ||= self.result_file || begin .create_identifier! "#{self.file}-result-#{message.identifier}" end unless ::File.exist?(result_file) and result_fifo ::ASIR::Fifo.mkfifo(result_file, perms) result_file_created = true end end super ensure if result_file_created ::File.unlink(result_file) rescue nil end end |
#serve_file! ⇒ Object
!SLIDE Process (receive) messages from a file.
96 97 98 99 100 101 |
# File 'lib/asir/transport/file.rb', line 96 def serve_file! ::File.open(file, "r") do | stream | @running = true _serve_stream! stream, ! one_way end end |
#with_result_file(state) ⇒ Object
68 69 70 71 72 73 74 |
# File 'lib/asir/transport/file.rb', line 68 def with_result_file state unless one_way || ( = state.).one_way if result_file = [:result_file] || self.result_file yield result_file end end end |