Skip to content
Snippets Groups Projects
Commit 9cad0957 authored by Lentz, Rick's avatar Lentz, Rick
Browse files

Upload New File

parent e7e2ea43
No related branches found
No related tags found
No related merge requests found
#Adapted from https://github.com/realpython/materials/blob/master/multiconn-client.py
import sys
import socket
import selectors
import types
import contextlib
import os
with contextlib.suppress(FileNotFoundError):
os.remove('screenshot.png')
sel = selectors.DefaultSelector()
def start_connections(host, port, x3d_id):
server_addr = (host, port)
print("starting connection to", server_addr)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setblocking(False)
sock.connect_ex(server_addr)
events = selectors.EVENT_READ | selectors.EVENT_WRITE
data = types.SimpleNamespace(
connid=1,
msg_total=sum([1]),
recv_total=0,
messages=[str(x3d_id).encode()],
outb=b"",
)
sel.register(sock, events, data=data)
def service_connection(key, mask):
sock = key.fileobj
data = key.data
if mask & selectors.EVENT_READ:
recv_data = sock.recv(1024) # Should be ready to read
sock.settimeout(None)
if not recv_data:
print("closing connection", data.connid)
sel.unregister(sock)
sock.close()
if recv_data:
with open('screenshot.png','ab') as b:
b.write(recv_data)
data.recv_total += len(recv_data)
print("received " + str(data.recv_total) + " image bytes from connection", data.connid)
if mask & selectors.EVENT_WRITE:
if not data.outb and data.messages:
data.outb = data.messages.pop(0)
if data.outb:
print("sending", repr(data.outb), "to connection", data.connid)
sent = sock.send(data.outb) # Should be ready to write
data.outb = data.outb[sent:]
if len(sys.argv) != 4:
print("This program simulates the agent communicate process where a client requests a dynamically rendered X3D asset from the host.")
print("usage:", sys.argv[0], "<host 192.168.86.225> <port 65500> <x3d asset number [0-14138] >")
sys.exit(1)
host, port, x3d_id = sys.argv[1:4]
start_connections(host, int(port), int(x3d_id))
try:
while True:
events = sel.select(timeout=1)
if events:
for key, mask in events:
service_connection(key, mask)
# Check for a socket being monitored to continue.
if not sel.get_map():
break
except KeyboardInterrupt:
print("caught keyboard interrupt, exiting")
finally:
sel.close()
sel.close()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment