From e7e2ea43c5d846eb79aa7e83e0a44d0d2d5d2266 Mon Sep 17 00:00:00 2001
From: "Lentz, Rick" <rick.w.lentz.civ@mail.mil>
Date: Fri, 13 Aug 2021 13:52:16 -0700
Subject: [PATCH] Upload New File

---
 .../homework1/Lentz_Python/server.py          | 70 +++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100644 MV3500Cohort2021JulySeptember/homework1/Lentz_Python/server.py

diff --git a/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/server.py b/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/server.py
new file mode 100644
index 0000000000..260a999e6a
--- /dev/null
+++ b/MV3500Cohort2021JulySeptember/homework1/Lentz_Python/server.py
@@ -0,0 +1,70 @@
+#Adapted from https://github.com/realpython/materials/blob/master/multiconn-client.py
+
+import sys
+import socket
+import selectors
+import types
+import subprocess
+import time
+
+sel = selectors.DefaultSelector()
+
+
+def accept_wrapper(sock):
+    conn, addr = sock.accept()  # Should be ready to read
+    print("accepted connection from", addr)
+    conn.setblocking(False)
+    data = types.SimpleNamespace(addr=addr, inb=b"", outb=b"")
+    events = selectors.EVENT_READ | selectors.EVENT_WRITE
+    sel.register(conn, 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
+        if recv_data:
+            data.outb += recv_data
+        else:
+            print("closing connection to", data.addr)
+            sel.unregister(sock)
+            sock.close()
+    if mask & selectors.EVENT_WRITE:
+        if data.outb:
+            fn = data.outb.decode('ascii')+'.x3d'
+            print( "getting " + fn )
+            subprocess.run(["wget", "https://nps.edu/x3d_repository/"+fn,"-O","x3d.x3d"])
+            subprocess.run(["/castle_game_engine/bin/view3dscene", "--screenshot","0","screenshot.png","x3d.x3d"])
+            png_bytes = open('screenshot.png','rb').read()
+            print("sending png of length " + str(len(png_bytes)) + ' to ', data.addr)
+            sent = sock.send(png_bytes)  # Should be ready to write
+            data.outb = png_bytes[sent:]
+            #time.sleep(5)
+            #subprocess.run(["rm", "screenshot.png","x3d.x3d"])
+
+
+if len(sys.argv) != 3:
+    print("usage:", sys.argv[0], "<host> <port>")
+    sys.exit(1)
+
+host, port = sys.argv[1], int(sys.argv[2])
+lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+lsock.bind((host, port))
+lsock.listen()
+print("listening on", (host, port))
+lsock.setblocking(False)
+sel.register(lsock, selectors.EVENT_READ, data=None)
+
+try:
+    while True:
+        events = sel.select(timeout=None)
+        for key, mask in events:
+            if key.data is None:
+                accept_wrapper(key.fileobj)
+            else:
+                service_connection(key, mask)
+except KeyboardInterrupt:
+    print("caught keyboard interrupt, exiting")
+finally:
+    sel.close()
\ No newline at end of file
-- 
GitLab