extface 0.5.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|