forked from bartvdbraak/blender
81 lines
1.8 KiB
Python
81 lines
1.8 KiB
Python
|
import bpy
|
||
|
import sys, os
|
||
|
import http, http.client, http.server, urllib
|
||
|
import subprocess, shutil, time, hashlib
|
||
|
|
||
|
VERSION = b"0.3"
|
||
|
|
||
|
PATH_PREFIX = "/tmp/"
|
||
|
|
||
|
QUEUED = 0
|
||
|
DISPATCHED = 1
|
||
|
DONE = 2
|
||
|
ERROR = 3
|
||
|
|
||
|
def clientConnection(scene):
|
||
|
netrender = scene.network_render
|
||
|
|
||
|
conn = http.client.HTTPConnection(netrender.server_address, netrender.server_port)
|
||
|
|
||
|
if clientVerifyVersion(conn):
|
||
|
return conn
|
||
|
else:
|
||
|
conn.close()
|
||
|
return None
|
||
|
|
||
|
def clientVerifyVersion(conn):
|
||
|
conn.request("GET", "version")
|
||
|
response = conn.getresponse()
|
||
|
|
||
|
if response.status != http.client.OK:
|
||
|
conn.close()
|
||
|
return False
|
||
|
|
||
|
server_version = response.read()
|
||
|
|
||
|
if server_version != VERSION:
|
||
|
print("Incorrect server version!")
|
||
|
print("expected", VERSION, "received", server_version)
|
||
|
return False
|
||
|
|
||
|
return True
|
||
|
|
||
|
def clientSendJob(conn, scene, anim = False, chunks = 5):
|
||
|
|
||
|
if anim:
|
||
|
job_frame = "%i:%i" % (scene.start_frame, scene.end_frame)
|
||
|
else:
|
||
|
job_frame = "%i" % (scene.current_frame, )
|
||
|
|
||
|
blacklist = []
|
||
|
|
||
|
filename = bpy.data.filename
|
||
|
|
||
|
name = scene.network_render.job_name
|
||
|
|
||
|
if name == "[default]":
|
||
|
path, name = os.path.split(filename)
|
||
|
|
||
|
for slave in scene.network_render.slaves_blacklist:
|
||
|
blacklist.append(slave.id)
|
||
|
|
||
|
blacklist = " ".join(blacklist)
|
||
|
|
||
|
headers = {"job-frame":job_frame, "job-name":name, "job-chunks": str(chunks), "slave-blacklist": blacklist}
|
||
|
|
||
|
# try to send path first
|
||
|
conn.request("POST", "job", filename, headers=headers)
|
||
|
response = conn.getresponse()
|
||
|
|
||
|
# if not found, send whole file
|
||
|
if response.status == http.client.NOT_FOUND:
|
||
|
f = open(bpy.data.filename, "rb")
|
||
|
conn.request("PUT", "file", f, headers=headers)
|
||
|
f.close()
|
||
|
response = conn.getresponse()
|
||
|
|
||
|
return response.getheader("job-id")
|
||
|
|
||
|
def clientRequestResult(conn, scene, job_id):
|
||
|
conn.request("GET", "render", headers={"job-id": job_id, "job-frame":str(scene.current_frame)})
|