Class: Baykit::BayServer::Docker::BuiltIn::WriteFileTaxi

Inherits:
Taxi::Taxi
  • Object
show all
Includes:
Taxi, Util::Postman, Util::Valve
Defined in:
lib/baykit/bayserver/docker/built_in/write_file_taxi.rb

Instance Attribute Summary collapse

Attributes inherited from Taxi::Taxi

#taxi_id

Instance Method Summary collapse

Methods included from Util::Postman

#abort, #flush, #is_zombie, #post_end

Methods inherited from Taxi::Taxi

#run

Constructor Details

#initializeWriteFileTaxi

Returns a new instance of WriteFileTaxi.



23
24
25
26
27
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 23

def initialize()
  super
  @write_queue = []
  @lock = Mutex.new()
end

Instance Attribute Details

#ch_validObject (readonly)

Returns the value of attribute ch_valid.



18
19
20
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 18

def ch_valid
  @ch_valid
end

#data_listenerObject (readonly)

Returns the value of attribute data_listener.



19
20
21
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 19

def data_listener
  @data_listener
end

#lockObject (readonly)

Returns the value of attribute lock.



21
22
23
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 21

def lock
  @lock
end

#outfileObject (readonly)

Returns the value of attribute outfile.



17
18
19
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 17

def outfile
  @outfile
end

#write_queueObject (readonly)

Returns the value of attribute write_queue.



20
21
22
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 20

def write_queue
  @write_queue
end

Instance Method Details

#departObject

Implements Taxi



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 50

def depart()
  begin
    while true
      buf = nil

      empty = nil
      @lock.synchronize do
        empty = @write_queue.empty?
        if !empty
          buf = @write_queue[0]
          @write_queue.delete_at(0)
        end
      end

      if empty
        break
      end

      @outfile.syswrite(buf)

      empty = nil
      @lock.synchronize do
        empty = @write_queue.empty?
      end

      if !empty
        next_run()
      end
    end
  rescue StandardError => e
    BayLog.error_e(e)
  end
end

#init(out, data_listener) ⇒ Object



29
30
31
32
33
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 29

def init(out, data_listener)
  @outfile = out
  @data_listener = data_listener
  @ch_valid = true
end

#next_runObject



94
95
96
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 94

def next_run()
  TaxiRunner.post(self)
end

#open_valveObject

Implements Resumable



42
43
44
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 42

def open_valve()
  next_run()
end

#post(data, adr, tag) ⇒ Object



84
85
86
87
88
89
90
91
92
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 84

def post(data, adr, tag)
  @lock.synchronize do
    empty = @write_queue.empty?
    @write_queue.append(data)
    if empty
      open_valve()
    end
  end
end

#to_sObject



35
36
37
# File 'lib/baykit/bayserver/docker/built_in/write_file_taxi.rb', line 35

def to_s()
  return super.to_s + " " + @data_listener.to_s
end