Skip to content

Commit f3935b4

Browse files
committed
BEngine networking is good
1 parent 54d13fe commit f3935b4

File tree

9 files changed

+460
-283
lines changed

9 files changed

+460
-283
lines changed

BEngine-Py/BERunNodes.py

Lines changed: 0 additions & 145 deletions
This file was deleted.

BEngine-Py/BEVersion.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

BEngine-Py/bengine/BENetworking.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import socket
2+
#import threading
3+
import bpy
4+
import select
5+
6+
from .Utils import BEUtils
7+
from . import BESettings, BERunNodes
8+
9+
import json
10+
import pickle
11+
12+
# MAX_BYTES = 4096
13+
# host = socket.gethostname() # get name of local machine
14+
# host = '10.0.0.5'
15+
# port = 55555
16+
17+
SERVER_SOCKET = None
18+
19+
20+
def handle_client(client_socket, addr):
21+
print('handle client')
22+
23+
# global SERVER_SOCKET
24+
25+
be_paths = BESettings.START_PARAMS
26+
27+
while True:
28+
if select.select([client_socket], [], [], 0.01)[0]:
29+
bpy.ops.wm.read_homefile(use_empty=True)
30+
31+
context = bpy.context
32+
33+
window = context.window_manager.windows[0]
34+
with context.temp_override(window=window):
35+
36+
# Receive
37+
js_base_stuff_bytes = RecvAll(client_socket, be_paths.buffer_size)
38+
# js_base_stuff = js_base_stuff_bytes.decode()
39+
js_base_stuff = json.loads(js_base_stuff_bytes)
40+
41+
be_base_stuff = BEUtils.BaseStuff(js_base_stuff["BaseValues"])
42+
43+
process_gn_obj, geom_mod, node_tree = BEUtils.LoadNodesTreeFromJSON(context, be_paths, be_base_stuff)
44+
45+
if be_base_stuff.run_type == BESettings.RunNodesType.RunNodes:
46+
js_inputs = js_base_stuff["BEngineInputs"]
47+
js_output_data = BERunNodes.RunNodes(context, be_paths, js_inputs, node_tree,
48+
process_gn_obj, geom_mod, be_base_stuff)
49+
50+
# Send
51+
if js_output_data:
52+
# SendAll(client_socket, str.encode(json.dumps(js_output_data)))
53+
client_socket.sendall(str.encode(json.dumps(js_output_data)))
54+
55+
elif be_base_stuff.run_type == BESettings.RunNodesType.UpdateNodes:
56+
BERunNodes.SaveBlenderInputs(be_base_stuff, node_tree)
57+
58+
59+
AddBackServer(0.01)
60+
61+
client_socket.close()
62+
63+
print("Closing connection with %s" % str(addr))
64+
# client_socket.close()
65+
# client_sockets.remove(client_socket)
66+
67+
break
68+
69+
70+
def background_server():
71+
if select.select([SERVER_SOCKET], [], [], 0.01)[0]:
72+
client_socket, addr = SERVER_SOCKET.accept()
73+
print("Got a connection from %s" % str(addr))
74+
# client_sockets.append(client_socket)
75+
76+
# client_thread = threading.Thread(target=handle_client, args=(client_socket, addr))
77+
# client_thread.start()
78+
handle_client(client_socket, addr)
79+
80+
# bpy.app.timers.register(1.0)
81+
82+
return 0.1
83+
84+
85+
def RunServer():
86+
global SERVER_SOCKET
87+
88+
SERVER_SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
89+
SERVER_SOCKET.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
90+
91+
SERVER_SOCKET.bind((BESettings.START_PARAMS.host, BESettings.START_PARAMS.port))
92+
SERVER_SOCKET.listen(1)
93+
94+
#client_sockets = []
95+
96+
AddBackServer(0)
97+
98+
print('Server has started!')
99+
100+
101+
def AddBackServer(first_interval_int):
102+
if not bpy.app.timers.is_registered(background_server):
103+
bpy.app.timers.register(background_server, first_interval = first_interval_int)
104+
# bpy.app.timers.register(background_server)
105+
106+
107+
# def SendAll(sock, msg):
108+
# # totalsent = 0
109+
110+
# # while totalsent < len(msg):
111+
# # sent = sock.send(msg[totalsent:])
112+
113+
# # if sent == 0:
114+
# # raise RuntimeError("socket connection broken")
115+
# # totalsent = totalsent + sent
116+
# sock.sendall(msg)
117+
118+
119+
def RecvAll(sock, buff_size):
120+
data = b''
121+
122+
while True:
123+
part = sock.recv(buff_size)
124+
125+
if not part:
126+
break
127+
128+
data += part
129+
130+
if len(part) < buff_size:
131+
# either 0 or end of data
132+
break
133+
134+
return data

0 commit comments

Comments
 (0)