tcpviewer.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import socket
  2. import threading
  3. import pyigl as 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,s):
  9. print("TCP iglviewer server listening on port " + str(PORT))
  10. try:
  11. while True:
  12. conn, addr = s.accept()
  13. lock.acquire()
  14. slist = []
  15. while True:
  16. buf = conn.recv(4096)
  17. if not buf:
  18. break
  19. slist.append(buf.decode('unicode_internal','ignore'))
  20. conn.close()
  21. data = ''.join(slist)
  22. temp = list(data)
  23. isempty = viewer.data.V.rows() == 0
  24. viewer.data.deserialize(temp)
  25. if isempty and viewer.data.V.rows() != 0:
  26. viewer.core.align_camera_center(viewer.data.V,viewer.data.F)
  27. lock.release()
  28. except:
  29. s.close()
  30. return
  31. class TCPViewer(igl.viewer.Viewer):
  32. def launch(self):
  33. try:
  34. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  35. s.connect((HOST, PORT))
  36. ser = self.data.serialize()
  37. a = array.array('u', ser)
  38. s.sendall(a)
  39. s.close()
  40. except:
  41. print("Failed to open socket, is tcpviewer running?")
  42. if __name__ == "__main__": # The main script is a server
  43. ## Try to open the socket first
  44. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  45. try:
  46. s.bind((HOST, PORT))
  47. except:
  48. print("Failed to bind, port already used.")
  49. exit(1)
  50. s.listen(1)
  51. viewer = igl.viewer.Viewer()
  52. lock = threading.Lock()
  53. t = threading.Thread(target=worker, args=(viewer,lock,s,))
  54. t.setDaemon(True)
  55. t.start()
  56. viewer.core.is_animating = True
  57. # viewer.data.dirty = int(0x03FF)
  58. viewer.launch_init(True,False)
  59. done = False
  60. while not done:
  61. lock.acquire()
  62. done = not viewer.launch_rendering(False)
  63. lock.release()
  64. time.sleep(0.000001) # DO NOT REMOVE ME
  65. viewer.launch_shut()