def run(self):
server_sock = self._init_server()
server_sock.setblocking(0)
while self.is_active:
(rlist, _, _) = select.select(
[server_sock], [], [], SELECT_LOOP_INTERVAL)
if not rlist:
continue
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info
try:
# read length
tx_length = read_varint32(client_sock)
if tx_length > 2 ** 24:
raise IOError
# transaction
unpacker = struct.Struct('! %ss' % tx_length)
body = client_sock.recv(unpacker.size, socket.MSG_WAITALL)
(tx,) = unpacker.unpack(body)
# submit
r = requests.post(self.submission_url,
headers=TX_SUBMISSION_HEADERS, data=tx)
# monkey patch ack
payment_ack = PaymentACK()
payment_ack.ParseFromString(r.content)
payment_ack.memo = "ack"
payment_ack_data = payment_ack.SerializeToString()
# pass on ack
write_varint32(client_sock, len(payment_ack_data))
client_sock.send(payment_ack_data)
except IOError:
pass
print "Bluetooth client disconnected"
client_sock.close()
server_sock.close()
评论列表
文章目录