extface 0.5.9 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/extface/driver/datecs/dp25.rb +352 -0
- data/app/models/extface/driver/datecs/fp550.rb +5 -5
- data/app/views/extface/driver/datecs/dp25/_control.html.erb +12 -0
- data/app/views/extface/driver/datecs/dp25/_settings.html.erb +0 -0
- data/lib/extface/version.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/extface/1033518405/aura80.log +11 -61
- data/test/dummy/log/extface/1033518405/aura80.log.20170327 +61 -0
- data/test/dummy/log/extface/229906743/fp550.log +5 -9
- data/test/dummy/log/extface/229906743/fp550.log.20170327 +9 -0
- data/test/dummy/log/extface/40760454/daisy_fx1200.log +5 -36
- data/test/dummy/log/extface/40760454/daisy_fx1200.log.20170327 +36 -0
- data/test/dummy/log/test.log +742 -0
- data/test/fixtures/extface/devices.yml +6 -0
- data/test/fixtures/extface/drivers.yml +3 -0
- data/test/models/extface/driver/datecs/dp25_test.rb +63 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd1126c53dc93e2a74c7924b5f1d539a41a7c127
|
4
|
+
data.tar.gz: d9426f418c1464e4745f970d75f8b008fb3f1793
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 09b1d1f4967722d9af90f14f6c892d769f788b7d1584c385d9ed0336f78bbdc4178127feded977132b7638d1d31c083104aecef5f31d614d57b4f2649081c77a
|
7
|
+
data.tar.gz: 0b353b388d3788f067cc2dd25467f6f3216de1274e8a0452982f22a658b410e9d1b9e105887d3885886042bb3a9f1a7b91b9ea54bae71b86ac0c4c38461d800a
|
@@ -0,0 +1,352 @@
|
|
1
|
+
module Extface
|
2
|
+
class Driver::Datecs::Dp25 < Extface::Driver::Base::Fiscal
|
3
|
+
NAME = 'Datecs DP25'.freeze
|
4
|
+
|
5
|
+
RESPONSE_TIMEOUT = 3 #seconds
|
6
|
+
INVALID_FRAME_RETRIES = 6 #count (bad length, bad checksum)
|
7
|
+
ACKS_MAX_WAIT = 60 #count / nothing is forever
|
8
|
+
NAKS_MAX_COUNT = 3 #count
|
9
|
+
BAD_SEQ_MAX_COUNT = 3
|
10
|
+
NO_RESP_MAX_COUNT = 3
|
11
|
+
|
12
|
+
TAX_GROUPS_MAP = {
|
13
|
+
1 => "\xc0",
|
14
|
+
2 => "\xc1",
|
15
|
+
3 => "\xc2",
|
16
|
+
4 => "\xc3",
|
17
|
+
5 => "\xc4",
|
18
|
+
6 => "\xc5",
|
19
|
+
7 => "\xc6",
|
20
|
+
8 => "\xc7"
|
21
|
+
}
|
22
|
+
|
23
|
+
PAYMENT_TYPE_MAP = {
|
24
|
+
1 => "P",
|
25
|
+
2 => "N",
|
26
|
+
3 => "C",
|
27
|
+
4 => "D",
|
28
|
+
5 => "B"
|
29
|
+
}
|
30
|
+
|
31
|
+
include Extface::Driver::Datecs::CommandsV1
|
32
|
+
|
33
|
+
def handle(buffer)
|
34
|
+
#if i = buffer.index(/[\x03\x16\x15]/) # find position of frame possible delimiter
|
35
|
+
if i = buffer.index("\x03") || buffer.index("\x16") || buffer.index("\x15")
|
36
|
+
rpush buffer[0..i] # this will make data available for #pull(timeout) method
|
37
|
+
return i+1 # return number of bytes processed
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
#tests
|
42
|
+
def non_fiscal_test
|
43
|
+
device.session("Non Fiscal Text") do |s|
|
44
|
+
s.notify "Printing Non Fiscal Text"
|
45
|
+
s.open_non_fiscal_doc
|
46
|
+
s.print "********************************"
|
47
|
+
s.print "Extface Print Test".center(32)
|
48
|
+
s.print "********************************"
|
49
|
+
s.fsend Printer::PAPER_MOVE, "1"
|
50
|
+
s.print "Driver: " + "#{self.class::NAME}".truncate(24)
|
51
|
+
s.close_non_fiscal_doc
|
52
|
+
s.notify "Printing finished"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def fiscal_test
|
57
|
+
sale_and_pay_items_session([
|
58
|
+
SaleItem.new( price: 0.01, text1: "Extface Test" )
|
59
|
+
])
|
60
|
+
end
|
61
|
+
|
62
|
+
#reports
|
63
|
+
def z_report_session
|
64
|
+
device.session("Z Report") do |s|
|
65
|
+
s.notify "Z Report Start"
|
66
|
+
s.fsend Closure::DAY_FIN_REPORT, "0"
|
67
|
+
s.notify "Z Report End"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def x_report_session
|
72
|
+
device.session("X Report") do |s|
|
73
|
+
s.notify "X Report Start"
|
74
|
+
s.fsend Closure::DAY_FIN_REPORT, "2"
|
75
|
+
s.notify "X Report End"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def period_report_session(from, to, detailed = true)
|
80
|
+
device.session("Period Report #{ '(detailed)' if detailed }") do |s|
|
81
|
+
s.notify "Period Report Start #{ '(detailed)' if detailed }"
|
82
|
+
s.fsend detailed ? Reports::REPORT_FP_BY_DATE : Reports::COMPACT_REPORT_FP_BY_DATE, "#{from.strftime('%d%m%y')},#{to.strftime('%d%m%y')}"
|
83
|
+
s.notify "Period Report End"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
#print
|
88
|
+
def open_non_fiscal_doc
|
89
|
+
fsend Sales::START_NON_FISCAL_DOC
|
90
|
+
@print_session = true
|
91
|
+
end
|
92
|
+
|
93
|
+
def print(text) #up to 38 sybols, TODO check
|
94
|
+
raise "Not in print session" unless @print_session
|
95
|
+
fsend Sales::PRINT_NON_FISCAL_TEXT, text
|
96
|
+
end
|
97
|
+
|
98
|
+
def close_non_fiscal_doc
|
99
|
+
fsend Sales::END_NON_FISCAL_DOC
|
100
|
+
@print_session = false
|
101
|
+
end
|
102
|
+
|
103
|
+
def check_status
|
104
|
+
flush #clear receive buffer
|
105
|
+
fsend(Info::GET_STATUS, 'X') # get 6 bytes status
|
106
|
+
errors.empty?
|
107
|
+
end
|
108
|
+
|
109
|
+
#fiscal
|
110
|
+
def open_fiscal_doc(operator = "1", password = "1")
|
111
|
+
fsend Sales::START_FISCAL_DOC, "#{operator.presence || "1"},#{password.presence || "1"},1"
|
112
|
+
@fiscal_session = true
|
113
|
+
end
|
114
|
+
|
115
|
+
def close_fiscal_doc
|
116
|
+
raise "Not in fiscal session" unless @fiscal_session
|
117
|
+
fsend Sales::END_FISCAL_DOC
|
118
|
+
@fiscal_session = false
|
119
|
+
end
|
120
|
+
|
121
|
+
def add_sale(sale_item)
|
122
|
+
raise "Not in fiscal session" unless @fiscal_session
|
123
|
+
fsend Sales::SALE_AND_SHOW, build_sale_data(sale_item)
|
124
|
+
end
|
125
|
+
|
126
|
+
def add_comment(text)
|
127
|
+
raise "Not in fiscal session" unless @fiscal_session
|
128
|
+
end
|
129
|
+
|
130
|
+
def add_payment(value = nil, type_num = nil)
|
131
|
+
raise "Not in fiscal session" unless @fiscal_session
|
132
|
+
payment_data = "".tap() do |data|
|
133
|
+
data << "\t"
|
134
|
+
data << PAYMENT_TYPE_MAP[type_num || 1]
|
135
|
+
data << ("%.2f" % value) unless value.blank?
|
136
|
+
end
|
137
|
+
fsend(Sales::TOTAL, payment_data)
|
138
|
+
end
|
139
|
+
|
140
|
+
def total_payment
|
141
|
+
raise "Not in fiscal session" unless @fiscal_session
|
142
|
+
fsend(Sales::TOTAL, "\t")
|
143
|
+
end
|
144
|
+
|
145
|
+
#basket
|
146
|
+
def sale_and_pay_items_session(items = [], operator = "1", password = "1")
|
147
|
+
device.session("Fiscal Doc") do |s|
|
148
|
+
s.notify "Fiscal Doc Start"
|
149
|
+
s.open_fiscal_doc
|
150
|
+
s.notify "Register Sale"
|
151
|
+
items.each do |item|
|
152
|
+
s.add_sale(item)
|
153
|
+
end
|
154
|
+
s.notify "Register Payment"
|
155
|
+
s.total_payment
|
156
|
+
s.notify "Close Fiscal Receipt"
|
157
|
+
s.close_fiscal_doc
|
158
|
+
s.notify "Fiscal Doc End"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def cancel_doc_session
|
163
|
+
device.session("Doc cancel") do |s|
|
164
|
+
s.notify "Doc Cancel Start"
|
165
|
+
s.fsend Sales::CANCEL_FISCAL_DOC
|
166
|
+
s.paper_cut
|
167
|
+
s.notify "Doc Cancel End"
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
#common
|
172
|
+
def fsend(cmd, data = "") #return data or nil
|
173
|
+
packet_data = build_packet(cmd, data) #store packet to be able to re-transmit it with the same sequence number
|
174
|
+
result = false
|
175
|
+
invalid_frames = 0 #counter for bad responses
|
176
|
+
nak_messages = 0 #counter for rejected packets (should re-transmit the packet)
|
177
|
+
no_resp = 0
|
178
|
+
flush #prevent double packet response issue like daisy driver
|
179
|
+
push packet_data #send packet
|
180
|
+
ACKS_MAX_WAIT.times do |retries|
|
181
|
+
errors.clear
|
182
|
+
if resp = frecv(RESPONSE_TIMEOUT)
|
183
|
+
if resp.valid?
|
184
|
+
human_status_errors(resp.status)
|
185
|
+
if errors.empty?
|
186
|
+
result = resp.data
|
187
|
+
break
|
188
|
+
else
|
189
|
+
raise errors.full_messages.join(',')
|
190
|
+
end
|
191
|
+
else #ack, nak or bad
|
192
|
+
if resp.nak?
|
193
|
+
nak_messages += 1
|
194
|
+
if nak_messages > NAKS_MAX_COUNT
|
195
|
+
errors.add :base, "#{NAKS_MAX_COUNT} NAKs Received. Abort!"
|
196
|
+
break
|
197
|
+
end
|
198
|
+
elsif !resp.ack?
|
199
|
+
invalid_frames += 1
|
200
|
+
if invalid_frames > INVALID_FRAME_RETRIES
|
201
|
+
errors.add :base, "#{INVALID_FRAME_RETRIES} Broken Packets Received. Abort!"
|
202
|
+
break
|
203
|
+
end
|
204
|
+
end
|
205
|
+
push packet_data unless resp.ack?
|
206
|
+
end
|
207
|
+
else
|
208
|
+
no_resp += 1
|
209
|
+
if no_resp > NO_RESP_MAX_COUNT
|
210
|
+
p "No reply in #{NO_RESP_MAX_COUNT * RESPONSE_TIMEOUT} seconds. Abort!"
|
211
|
+
errors.add :base, "No reply in #{NO_RESP_MAX_COUNT * RESPONSE_TIMEOUT} seconds. Abort!"
|
212
|
+
return result
|
213
|
+
end
|
214
|
+
end
|
215
|
+
errors.add :base, "#{ACKS_MAX_WAIT} ACKs Received. Abort!"
|
216
|
+
end
|
217
|
+
return result
|
218
|
+
end
|
219
|
+
|
220
|
+
def frecv(timeout) # return Frame or nil
|
221
|
+
rframe = nil
|
222
|
+
BAD_SEQ_MAX_COUNT.times do
|
223
|
+
errors.clear
|
224
|
+
if frame_bytes = pull(timeout)
|
225
|
+
rframe = Frame.new(frame_bytes.b)
|
226
|
+
if rframe.seq.nil? || rframe.seq.ord == sequence_number(false) #accept only current sequence number as reply
|
227
|
+
break
|
228
|
+
else
|
229
|
+
errors.add :base, "Sequence mismatch"
|
230
|
+
p "Invalid sequence (expected: #{sequence_number(false).to_s(16)}, got: #{rframe.seq.ord.to_s(16)})"
|
231
|
+
rframe = nil #invalidate mismatch sequence frame for the last retry
|
232
|
+
end
|
233
|
+
else
|
234
|
+
errors.add :base, "No data received from device"
|
235
|
+
break
|
236
|
+
end
|
237
|
+
end
|
238
|
+
return rframe
|
239
|
+
end
|
240
|
+
|
241
|
+
def build_packet(cmd, data = "")
|
242
|
+
"".b.tap() do |packet|
|
243
|
+
packet << STX #Preamble. 1 byte long. Value: 01H.
|
244
|
+
packet << 0x20 + 4 + data.b.length #Number of bytes from <01> preamble (excluded) to <05> (included) plus the fixed offset of 20H
|
245
|
+
packet << sequence_number #Sequence number of the frame. Length : 1 byte. Value: 20H – FFH.
|
246
|
+
packet << cmd #Length: 1 byte. Value: 20H - 7FH.
|
247
|
+
packet << data.b #Length: 0 - 218 bytes for Host to printer
|
248
|
+
packet << PA1 #Post-amble. Length: 1 byte. Value: 05H.
|
249
|
+
packet << Frame.bcc(packet[1..-1])#Control sum (0000H-FFFFH). Length: 4 bytes. Value of each byte: 30H-3FH
|
250
|
+
packet << ETX #Terminator. Length: 1 byte. Value: 03H.
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def paper_cut
|
255
|
+
device.session('Paper Cut') do |s|
|
256
|
+
s.push build_packet(Printer::PAPER_CUT)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def human_status_errors(status) #6 bytes status
|
261
|
+
status_0 = status[0].ord
|
262
|
+
errors.add :base, "Fiscal Device General Error" unless (status_0 & 0x20).zero?
|
263
|
+
errors.add :base, "Invalid Command" unless (status_0 & 0x02).zero?
|
264
|
+
errors.add :base, "Date & Time Not Set" unless (status_0 & 0x04).zero?
|
265
|
+
errors.add :base, "Syntax Error" unless (status_0 & 0x01).zero?
|
266
|
+
status_1 = status[1].ord
|
267
|
+
errors.add :base, "Unpermitted Command In This Mode" unless (status_1 & 0x02).zero?
|
268
|
+
errors.add :base, "Field Overflow" unless (status_1 & 0x01).zero?
|
269
|
+
end
|
270
|
+
|
271
|
+
private
|
272
|
+
def build_sale_data(item)
|
273
|
+
"".b.tap() do |data|
|
274
|
+
data << item.text1.truncate(30) unless item.text1.blank?
|
275
|
+
data << "\x0a#{text2}" unless item.text2.blank?
|
276
|
+
data << "\t"
|
277
|
+
data << TAX_GROUPS_MAP[item.tax_group || 2]
|
278
|
+
data << ("%.2f" % item.price)
|
279
|
+
data << "*#{item.qty.to_s}" unless item.qty.blank?
|
280
|
+
data << ",#{item.percent}" unless item.percent.blank?
|
281
|
+
data << ",;#{'%.2f' % item.neto}" unless item.neto.blank?
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
def sequence_number(increment = true)
|
286
|
+
@seq ||= 0x1f
|
287
|
+
@seq += 1 if increment
|
288
|
+
@seq = 0x1f if @seq == 0x7f
|
289
|
+
@seq
|
290
|
+
end
|
291
|
+
|
292
|
+
class Frame
|
293
|
+
include ActiveModel::Validations
|
294
|
+
attr_reader :frame, :len, :seq, :cmd, :data, :status, :bcc
|
295
|
+
|
296
|
+
validates_presence_of :frame#, unless: :unpacked?
|
297
|
+
validate :bcc_validation
|
298
|
+
validate :len_validation
|
299
|
+
|
300
|
+
def initialize(buffer)
|
301
|
+
if match = buffer.match(/\x01(.{1})(.{1})(.{1})(.*)\x04(.{6})\x05(.{4})\x03/nm)
|
302
|
+
@frame = match.to_a.first
|
303
|
+
@len, @seq, @cmd, @data, @status, @bcc = match.captures
|
304
|
+
else
|
305
|
+
if buffer[/^\x16+$/] # only ACKs
|
306
|
+
@ack = true
|
307
|
+
elsif buffer.index("\x15")
|
308
|
+
@nak = true
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
def ack?; !!@ack; end #should wait, response is yet to come
|
314
|
+
|
315
|
+
def nak?; !!@nak; end #should retry command with same seq
|
316
|
+
|
317
|
+
private
|
318
|
+
|
319
|
+
def unpacked? # is it packed or unpacked message?
|
320
|
+
@ack || @nak
|
321
|
+
end
|
322
|
+
|
323
|
+
def bcc_validation
|
324
|
+
unless unpacked? || frame.blank?
|
325
|
+
calc_bcc = self.class.bcc frame[1..-6]
|
326
|
+
errors.add(:bcc, I18n.t('errors.messages.invalid')) if bcc != calc_bcc
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
def len_validation
|
331
|
+
unless unpacked? || frame.blank?
|
332
|
+
errors.add(:len, I18n.t('errors.messages.invalid')) if frame.nil? || len.ord != (frame[1..-6].length + 0x20)
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
class << self
|
337
|
+
def bcc(buffer)
|
338
|
+
sum = 0
|
339
|
+
buffer.each_byte do |byte|
|
340
|
+
sum += byte
|
341
|
+
end
|
342
|
+
"".tap() do |bcc|
|
343
|
+
4.times do |halfbyte|
|
344
|
+
bcc.insert 0, (0x30 + ((sum >> (halfbyte*4)) & 0x0f)).chr
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
end
|
352
|
+
end
|
@@ -241,10 +241,10 @@ module Extface
|
|
241
241
|
def build_packet(cmd, data = "")
|
242
242
|
"".b.tap() do |packet|
|
243
243
|
packet << STX #Preamble. 1 byte long. Value: 01H.
|
244
|
-
packet << 0x20 + 4 + data.length #Number of bytes from <01> preamble (excluded) to <05> (included) plus the fixed offset of 20H
|
244
|
+
packet << 0x20 + 4 + data.b.length #Number of bytes from <01> preamble (excluded) to <05> (included) plus the fixed offset of 20H
|
245
245
|
packet << sequence_number #Sequence number of the frame. Length : 1 byte. Value: 20H – FFH.
|
246
246
|
packet << cmd #Length: 1 byte. Value: 20H - 7FH.
|
247
|
-
packet << data
|
247
|
+
packet << data.b #Length: 0 - 218 bytes for Host to printer
|
248
248
|
packet << PA1 #Post-amble. Length: 1 byte. Value: 05H.
|
249
249
|
packet << Frame.bcc(packet[1..-1])#Control sum (0000H-FFFFH). Length: 4 bytes. Value of each byte: 30H-3FH
|
250
250
|
packet << ETX #Terminator. Length: 1 byte. Value: 03H.
|
@@ -270,8 +270,8 @@ module Extface
|
|
270
270
|
|
271
271
|
private
|
272
272
|
def build_sale_data(item)
|
273
|
-
"".tap() do |data|
|
274
|
-
data << item.text1 unless item.text1.blank?
|
273
|
+
"".b.tap() do |data|
|
274
|
+
data << item.text1.truncate(30) unless item.text1.blank?
|
275
275
|
data << "\x0a#{text2}" unless item.text2.blank?
|
276
276
|
data << "\t"
|
277
277
|
data << TAX_GROUPS_MAP[item.tax_group || 2]
|
@@ -349,4 +349,4 @@ module Extface
|
|
349
349
|
end
|
350
350
|
|
351
351
|
end
|
352
|
-
end
|
352
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
<%= button_to 'Paper Cut', fiscal_device_path(@device), remote: true, name: :paper_cut, value: true, class: 'btn btn-warning' %>
|
3
|
+
|
4
|
+
<%= button_to 'Non Fiscal Test', fiscal_device_path(@device), remote: true, name: :non_fiscal_test, value: true, class: 'btn btn-warning' %>
|
5
|
+
|
6
|
+
<%= button_to 'Fiscal Test', fiscal_device_path(@device), remote: true, name: :fiscal_test, value: true, class: 'btn btn-warning' %>
|
7
|
+
|
8
|
+
<%= button_to 'X Report', fiscal_device_path(@device), remote: true, name: :x_report, value: true, class: 'btn btn-warning' %>
|
9
|
+
<%= button_to 'Z Report', fiscal_device_path(@device), remote: true, name: :z_report, value: true, class: 'btn btn-warning' %>
|
10
|
+
|
11
|
+
<%= button_to 'Cancel Fiscal Doc', fiscal_device_path(@device), remote: true, name: :cancel_fiscal_doc, value: true, class: 'btn btn-danger' %>
|
12
|
+
|
File without changes
|
data/lib/extface/version.rb
CHANGED
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -1,61 +1,11 @@
|
|
1
|
-
# Logfile created on
|
2
|
-
D, [
|
3
|
-
D, [
|
4
|
-
D, [
|
5
|
-
D, [
|
6
|
-
D, [
|
7
|
-
D, [
|
8
|
-
D, [
|
9
|
-
D, [
|
10
|
-
D, [
|
11
|
-
D, [
|
12
|
-
D, [2016-08-30T20:14:16.703247 #11185] DEBUG -- : --> 1D 72 49
|
13
|
-
D, [2016-08-30T20:15:06.313416 #11278] DEBUG -- : --> 1D 72 49
|
14
|
-
D, [2016-08-30T20:17:07.375733 #11444] DEBUG -- : --> 1D 72 49
|
15
|
-
D, [2016-08-30T20:17:24.647971 #11493] DEBUG -- : --> 1D 72 49
|
16
|
-
D, [2016-08-30T20:18:37.464329 #11616] DEBUG -- : --> 1D 72 49
|
17
|
-
D, [2016-08-30T20:19:20.679790 #11685] DEBUG -- : --> 1D 72 49
|
18
|
-
D, [2016-08-30T20:21:02.922394 #11869] DEBUG -- : --> 1D 72 49
|
19
|
-
D, [2016-08-30T20:21:32.495893 #11940] DEBUG -- : --> 1D 72 49
|
20
|
-
D, [2016-08-30T20:22:00.172068 #11996] DEBUG -- : --> 1D 72 49
|
21
|
-
D, [2016-08-30T20:22:30.752293 #12059] DEBUG -- : --> 1D 72 49
|
22
|
-
D, [2016-08-30T20:23:11.439869 #12131] DEBUG -- : --> 1D 72 49
|
23
|
-
D, [2016-08-30T20:25:12.466082 #12347] DEBUG -- : --> 1D 72 49
|
24
|
-
D, [2016-08-30T20:25:13.544813 #12347] DEBUG -- : --> 1D 72 49
|
25
|
-
D, [2016-08-30T20:25:36.772943 #12409] DEBUG -- : --> 1D 72 49
|
26
|
-
D, [2016-08-30T20:25:37.826787 #12409] DEBUG -- : --> 1D 72 49
|
27
|
-
D, [2016-08-30T20:26:08.174733 #12492] DEBUG -- : --> 1D 72 49
|
28
|
-
D, [2016-08-30T20:26:09.309872 #12492] DEBUG -- : --> 1D 72 49
|
29
|
-
D, [2016-08-30T20:26:25.326032 #12549] DEBUG -- : --> 1D 72 49
|
30
|
-
D, [2016-08-30T20:26:26.422158 #12549] DEBUG -- : --> 1D 72 49
|
31
|
-
D, [2016-08-30T20:30:26.748199 #12939] DEBUG -- : --> 1D 72 49
|
32
|
-
D, [2016-08-30T20:30:27.768289 #12939] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
33
|
-
D, [2016-08-30T20:30:37.770416 #12939] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
34
|
-
D, [2016-08-30T20:30:47.797936 #12939] DEBUG -- : --> 1D 72 49
|
35
|
-
D, [2016-08-30T20:30:48.838943 #12939] DEBUG -- : --> 1D 72 49
|
36
|
-
D, [2016-08-30T20:31:48.872915 #13113] DEBUG -- : --> 1D 72 49
|
37
|
-
D, [2016-08-30T20:31:49.905292 #13113] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
38
|
-
D, [2016-08-30T20:31:49.912748 #13113] DEBUG -- : --> 1B 69
|
39
|
-
D, [2016-08-30T20:31:51.017460 #13113] DEBUG -- : --> 1D 72 49
|
40
|
-
D, [2016-08-30T20:31:52.122170 #13113] DEBUG -- : --> 1D 72 49
|
41
|
-
D, [2016-08-30T20:32:18.631939 #13201] DEBUG -- : --> 1D 72 49
|
42
|
-
D, [2016-08-30T20:32:19.685756 #13201] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
43
|
-
D, [2016-08-30T20:32:19.691691 #13201] DEBUG -- : --> 1B 69
|
44
|
-
D, [2016-08-30T20:32:20.805019 #13201] DEBUG -- : --> 1D 72 49
|
45
|
-
D, [2016-08-30T20:32:21.901567 #13201] DEBUG -- : --> 1D 72 49
|
46
|
-
D, [2016-08-30T20:32:58.169297 #13288] DEBUG -- : --> 1D 72 49
|
47
|
-
D, [2016-08-30T20:32:59.194279 #13288] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
48
|
-
D, [2016-08-30T20:32:59.200145 #13288] DEBUG -- : --> 1B 69
|
49
|
-
D, [2016-08-30T20:33:00.306228 #13288] DEBUG -- : --> 1D 72 49
|
50
|
-
D, [2016-08-30T20:33:01.409001 #13288] DEBUG -- : --> 1D 72 49
|
51
|
-
D, [2016-08-30T20:33:54.473995 #13365] DEBUG -- : --> 1D 72 49
|
52
|
-
D, [2016-08-30T20:33:55.558490 #13365] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
53
|
-
D, [2016-08-30T20:33:55.564694 #13365] DEBUG -- : --> 1B 69
|
54
|
-
D, [2016-08-30T20:33:57.764655 #13365] DEBUG -- : --> 1D 72 49
|
55
|
-
D, [2016-08-30T20:34:07.768330 #13365] DEBUG -- : --> 1D 72 49
|
56
|
-
D, [2016-08-30T20:34:59.749887 #13488] DEBUG -- : --> 1D 72 49
|
57
|
-
D, [2016-08-30T20:35:09.752793 #13488] DEBUG -- : --> 1D 72 49
|
58
|
-
D, [2016-08-30T20:35:52.810287 #13603] DEBUG -- : --> 1D 72 49
|
59
|
-
D, [2016-08-30T20:36:02.812555 #13603] DEBUG -- : --> 1D 72 49
|
60
|
-
D, [2016-08-30T20:42:42.680478 #14028] DEBUG -- : --> 1D 72 49
|
61
|
-
D, [2016-08-30T20:42:52.680945 #14028] DEBUG -- : --> 1D 72 49
|
1
|
+
# Logfile created on 2017-03-28 20:49:40 -0400 by logger.rb/44203
|
2
|
+
D, [2017-03-28T20:49:40.028578 #9345] DEBUG -- : --> 1D 72 49
|
3
|
+
D, [2017-03-28T20:49:41.104858 #9345] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
4
|
+
D, [2017-03-28T20:49:41.110390 #9345] DEBUG -- : --> 1B 69
|
5
|
+
D, [2017-03-28T20:49:42.173477 #9345] DEBUG -- : --> 1D 72 49
|
6
|
+
D, [2017-03-28T20:49:43.268342 #9345] DEBUG -- : --> 1D 72 49
|
7
|
+
D, [2017-03-28T20:51:06.085122 #9490] DEBUG -- : --> 1D 72 49
|
8
|
+
D, [2017-03-28T20:51:07.158484 #9490] DEBUG -- : --> 0D 0A 0D 0A 0D 0A
|
9
|
+
D, [2017-03-28T20:51:07.161589 #9490] DEBUG -- : --> 1B 69
|
10
|
+
D, [2017-03-28T20:51:08.278707 #9490] DEBUG -- : --> 1D 72 49
|
11
|
+
D, [2017-03-28T20:51:09.379386 #9490] DEBUG -- : --> 1D 72 49
|