Merge pull request #37 from Danielhiversen/patch-9

Make communication thread safe
This commit is contained in:
Matthew Garrett 2016-12-25 11:07:19 +00:00 committed by GitHub
commit a0a1c1b7a1

View file

@ -5,6 +5,7 @@ from Crypto.Cipher import AES
import time import time
import random import random
import socket import socket
import threading
def gendevice(devtype, host, mac): def gendevice(devtype, host, mac):
if devtype == 0: # SP1 if devtype == 0: # SP1
@ -140,6 +141,7 @@ class device:
self.cs.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.cs.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
self.cs.bind(('',0)) self.cs.bind(('',0))
self.type = "Unknown" self.type = "Unknown"
self.lock = threading.Lock()
def auth(self): def auth(self):
payload = bytearray(0x50) payload = bytearray(0x50)
@ -230,16 +232,17 @@ class device:
packet[0x21] = checksum >> 8 packet[0x21] = checksum >> 8
starttime = time.time() starttime = time.time()
while True: with self.lock:
try: while True:
self.cs.sendto(packet, self.host) try:
self.cs.settimeout(1) self.cs.sendto(packet, self.host)
response = self.cs.recvfrom(1024) self.cs.settimeout(1)
break response = self.cs.recvfrom(1024)
except socket.timeout: break
if (time.time() - starttime) < self.timeout: except socket.timeout:
pass if (time.time() - starttime) < self.timeout:
raise pass
raise
return bytearray(response[0]) return bytearray(response[0])