some backup codes - wookay/BlenderPlot.jl GitHub Wiki
using UUIDs
pkg = Base.PkgId(UUID("bf623aeb-1218-402c-922b-c259951e1c13"), "PushInterface")
sourcepath = Base.locate_package(pkg)
include(normpath(dirname(sourcepath), "..", "examples", "blenderplot", "example.jl"))
include(normpath(dirname(sourcepath), "..", "examples", "pushinterface", "rtmidi", "set_led.jl"))
# ~/blender-build/blender/release/scripts/modules/web.py
import pyuv
import threading
import signal
# code from https://github.com/saghul/pyuv/blob/v1.x/tests/benchmark-tcp.py
RESPONSE = "HTTP/1.1 200 OK\r\n" \
"Content-Type: text/plain\r\n" \
"Content-Length: 12\r\n" \
"\r\n" \
"hello world\n"
class Server:
def __init__(self):
self.clients = []
loop = pyuv.Loop.default_loop()
self.ac = pyuv.Async(loop, self.async_close)
self.signal_h = pyuv.Signal(loop)
self.signal_h.start(self.signal_cb, signal.SIGINT)
def start(self, port):
self.server = pyuv.TCP(self.ac.loop)
self.server.bind(("0.0.0.0", port))
self.server.listen(self.on_connection)
threading.Thread(target=self.ac.loop.run).start()
def on_client_shutdown(self, client, error):
client.close()
self.clients.remove(client)
def on_read(self, client, data, error):
if data is None:
client.close()
self.clients.remove(client)
return
data = data.strip()
if not data:
return
print("on_read", data)
client.write(bytes(RESPONSE, 'utf-8'))
client.shutdown(self.on_client_shutdown)
def on_connection(self, server, error):
client = pyuv.TCP(self.server.loop)
server.accept(client)
self.clients.append(client)
client.start_read(self.on_read)
def stop(self):
self.ac.send()
def signal_cb(self, handle, signum):
self.ac.send()
def async_close(self, ac):
print("closing...")
[c.close() for c in self.clients]
ac.close()
self.signal_h.close()
self.server.close()
ac.loop.stop()
if __name__ == '__main__':
PORT = 1234
serv = Server()
serv.start(PORT)
print("serv", PORT, "...")
input(">> ")
serv.stop()