Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def write_wait_response(self, buffer, timeout=30):
- '''
- Write and wait for response
- Params:
- Buffer BYTE encoded data
- Timeout timeout to wait for response
- Returns:
- response str if successful
- '''
- self.buffer = buffer
- if self.waitLock(timeout):
- # condition var was signaled, we can return a response
- readbuf = bytes(self.readbuffer)
- self.readbuffer = b''
- return readbuf
- else:
- print("AsyncClientSocket: No response recieved from {} in {} seconds, dumping buffer".format(
- self.sa, timeout))
- self.buffer = ''
- raise TimeoutError("AsyncClientSocket Timed Out")
- def handle_read(self):
- self.readbuffer, address = self.recvfrom(2048)
- print(self.readbuffer)
- print("notifying")
- self.cond.notifyAll()
- waiting
- AsyncClientSocket: writing 5 bytes
- b'200,2' <- that's the server response
- notifying
- error: uncaptured python exception, closing channel <my_socket_stuff.AsyncClientSocket connected 127.0.0.1:50000 at 0x1051bf438> (<class 'RuntimeError'>:cannot notify on un-acquired lock
- class AsyncClientSocket(asyncore.dispatcher):
- def __init__(self, socketargs):
- asyncore.dispatcher.__init__(self)
- family, type, proto, canonname, sa = socketargs
- self.sa = sa
- self.create_socket(family, type)
- if type == socket.SOCK_STREAM:
- self.connect( sa )
- elif type == socket.SOCK_DGRAM:
- pass
- self.buffer = b''
- self.lock = threading.Lock()
- self.cond = threading.Condition(self.lock)
- self.readbuffer = b''
- def write_wait_response(self, buffer, timeout=30):
- '''
- Write and wait for response
- Params:
- Buffer BYTE encoded data
- Timeout timeout to wait for response
- Returns:
- response str if successful
- '''
- self.buffer = buffer
- if self.waitLock(timeout):
- # condition var was signaled, we can return a response
- readbuf = bytes(self.readbuffer)
- self.readbuffer = b''
- return readbuf
- else:
- print("AsyncClientSocket: No response recieved from {} in {} seconds, dumping buffer".format(
- self.sa, timeout))
- self.buffer = ''
- raise TimeoutError("AsyncClientSocket Timed Out")
- def waitLock(self, timeout):
- '''
- Wait for timeout seconds on CV
- '''
- try:
- self.cond.acquire()
- print("waiting")
- return self.cond.wait(timeout)
- finally:
- self.cond.release()
- def handle_connect(self):
- pass
- def handle_close(self):
- self.close()
- def handle_read(self):
- self.readbuffer, address = self.recvfrom(2048)
- print(self.readbuffer)
- print("notifying")
- self.cond.notifyAll()
- def writable(self):
- return (len(self.buffer) > 0)
- def handle_write(self):
- print("AsyncClientSocket: writing {} bytes".format(len(self.buffer)))
- self.readbuffer = b''
- sent = self.sendto(self.buffer, self.sa)
- self.buffer = self.buffer[sent:]
Add Comment
Please, Sign In to add comment