tcpviewer_single.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import socket
  2. import threading
  3. import igl
  4. import array
  5. import time
  6. HOST = 'localhost' # Symbolic name meaning all available interfaces
  7. PORT = 50008 # Arbitrary non-privileged port
  8. def worker(viewer,lock):
  9. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10. s.bind((HOST, PORT))
  11. s.listen(1)
  12. print("TCP iglviewer server listening on port " + str(PORT))
  13. try:
  14. while True:
  15. conn, addr = s.accept()
  16. lock.acquire()
  17. slist = []
  18. while True:
  19. buf = conn.recv(4096)
  20. if not buf:
  21. break
  22. slist.append(buf.decode('unicode_internal','ignore'))
  23. conn.close()
  24. data = ''.join(slist)
  25. temp = list(data)
  26. isempty = viewer.data.V.rows() == 0
  27. viewer.data.deserialize(temp)
  28. if isempty and viewer.data.V.rows() != 0:
  29. viewer.core.align_camera_center(viewer.data.V,viewer.data.F)
  30. lock.release()
  31. except:
  32. s.close()
  33. return
  34. class TCPViewer(igl.viewer.Viewer):
  35. def launch(self):
  36. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  37. s.connect((HOST, PORT))
  38. a = array.array('u',self.data.serialize())
  39. s.sendall(a)
  40. s.close()
  41. if __name__ == "__main__": # The main script is a server
  42. viewer = igl.viewer.Viewer()
  43. lock = threading.Lock()
  44. t = threading.Thread(target=worker, args=(viewer,lock,))
  45. t.setDaemon(True)
  46. t.start()
  47. viewer.core.is_animating = True
  48. # viewer.data.dirty = int(0x03FF)
  49. viewer.launch_init(True,False)
  50. done = False
  51. while not done:
  52. lock.acquire()
  53. done = not viewer.launch_rendering(False)
  54. lock.release()
  55. time.sleep(0.000001) # DO NOT REMOVE ME
  56. viewer.launch_shut()