1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import socket
- import threading
- import pyigl as igl
- import array
- import time
- HOST = 'localhost' # Symbolic name meaning all available interfaces
- PORT = 50008 # Arbitrary non-privileged port
- def worker(viewer,lock,s):
- print("TCP iglviewer server listening on port " + str(PORT))
- try:
- while True:
- conn, addr = s.accept()
- lock.acquire()
- slist = []
- while True:
- buf = conn.recv(10000000)
- if not buf:
- break
- slist.append(buf.decode('unicode_internal','ignore'))
- conn.close()
- data = ''.join(slist)
- temp = list(data)
- isempty = viewer.data.V.rows() == 0
- viewer.data.deserialize(temp)
- if isempty and viewer.data.V.rows() != 0:
- viewer.core.align_camera_center(viewer.data.V,viewer.data.F)
- lock.release()
- except:
- s.close()
- return
- class TCPViewer(igl.viewer.Viewer):
- def launch(self):
- try:
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect((HOST, PORT))
- a = array.array('u',self.data.serialize())
- s.sendall(a)
- s.close()
- except:
- print("Failed to open socket, is tcpviewer running?")
- if __name__ == "__main__": # The main script is a server
- ## Try to open the socket first
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- s.bind((HOST, PORT))
- except:
- print("Failed to bind, port already used.")
- exit(1)
- s.listen(1)
- viewer = igl.viewer.Viewer()
- lock = threading.Lock()
- t = threading.Thread(target=worker, args=(viewer,lock,s,))
- t.setDaemon(True)
- t.start()
- viewer.core.is_animating = True
- # viewer.data.dirty = int(0x03FF)
- viewer.launch_init(True,False)
- done = False
- while not done:
- lock.acquire()
- done = not viewer.launch_rendering(False)
- lock.release()
- time.sleep(0.000001) # DO NOT REMOVE ME
- viewer.launch_shut()
|