tcpviewer.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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(10000000)
  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. a = array.array('u',self.data.serialize())
  37. s.sendall(a)
  38. s.close()
  39. except:
  40. print("Failed to open socket, is tcpviewer running?")
  41. if __name__ == "__main__": # The main script is a server
  42. ## Try to open the socket first
  43. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  44. try:
  45. s.bind((HOST, PORT))
  46. except:
  47. print("Failed to bind, port already used.")
  48. exit(1)
  49. s.listen(1)
  50. viewer = igl.viewer.Viewer()
  51. lock = threading.Lock()
  52. t = threading.Thread(target=worker, args=(viewer,lock,s,))
  53. t.setDaemon(True)
  54. t.start()
  55. viewer.core.is_animating = True
  56. # viewer.data.dirty = int(0x03FF)
  57. viewer.launch_init(True,False)
  58. done = False
  59. while not done:
  60. lock.acquire()
  61. done = not viewer.launch_rendering(False)
  62. lock.release()
  63. time.sleep(0.000001) # DO NOT REMOVE ME
  64. viewer.launch_shut()