fix: delayable from accessing session data before its ready
refactor: remove feat: submodule update
This commit is contained in:
@ -3,7 +3,7 @@ import logging
|
|||||||
import bpy
|
import bpy
|
||||||
|
|
||||||
from . import operators, presence, utils
|
from . import operators, presence, utils
|
||||||
from .libs.replication.replication.constants import FETCHED, RP_COMMON
|
from .libs.replication.replication.constants import FETCHED, RP_COMMON, STATE_ACTIVE
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
logger.setLevel(logging.WARNING)
|
logger.setLevel(logging.WARNING)
|
||||||
@ -89,7 +89,7 @@ class DynamicRightSelectTimer(Timer):
|
|||||||
session = operators.client
|
session = operators.client
|
||||||
settings = bpy.context.window_manager.session
|
settings = bpy.context.window_manager.session
|
||||||
|
|
||||||
if session:
|
if session and session.state == STATE_ACTIVE:
|
||||||
# Find user
|
# Find user
|
||||||
if self._user is None:
|
if self._user is None:
|
||||||
self._user = session.online_users.get(settings.username)
|
self._user = session.online_users.get(settings.username)
|
||||||
@ -195,13 +195,14 @@ class DrawClient(Draw):
|
|||||||
session = getattr(operators, 'client', None)
|
session = getattr(operators, 'client', None)
|
||||||
renderer = getattr(presence, 'renderer', None)
|
renderer = getattr(presence, 'renderer', None)
|
||||||
|
|
||||||
if session and renderer:
|
if session and renderer and session.state == STATE_ACTIVE:
|
||||||
settings = bpy.context.window_manager.session
|
settings = bpy.context.window_manager.session
|
||||||
users = session.online_users
|
users = session.online_users
|
||||||
|
|
||||||
for user in users.values():
|
for user in users.values():
|
||||||
metadata = user.get('metadata')
|
metadata = user.get('metadata')
|
||||||
|
|
||||||
|
if 'color' in metadata:
|
||||||
if settings.presence_show_selected and 'selected_objects' in metadata.keys():
|
if settings.presence_show_selected and 'selected_objects' in metadata.keys():
|
||||||
renderer.draw_client_selection(
|
renderer.draw_client_selection(
|
||||||
user['id'], metadata['color'], metadata['selected_objects'])
|
user['id'], metadata['color'], metadata['selected_objects'])
|
||||||
@ -220,7 +221,7 @@ class ClientUpdate(Timer):
|
|||||||
session = getattr(operators, 'client', None)
|
session = getattr(operators, 'client', None)
|
||||||
renderer = getattr(presence, 'renderer', None)
|
renderer = getattr(presence, 'renderer', None)
|
||||||
|
|
||||||
if session and renderer:
|
if session and renderer and session.state == STATE_ACTIVE:
|
||||||
# Check if session has been closes prematurely
|
# Check if session has been closes prematurely
|
||||||
if session.state == 0:
|
if session.state == 0:
|
||||||
bpy.ops.session.stop()
|
bpy.ops.session.stop()
|
||||||
|
Submodule multi_user/libs/replication updated: 44af43ddb4...d0f2338fb6
@ -83,7 +83,8 @@ class SessionStartOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
client = Session(
|
client = Session(
|
||||||
factory=bpy_factory,
|
factory=bpy_factory,
|
||||||
python_path=bpy.app.binary_path_python)
|
python_path=bpy.app.binary_path_python,
|
||||||
|
default_strategy=settings.right_strategy)
|
||||||
|
|
||||||
# Host a session
|
# Host a session
|
||||||
if self.host:
|
if self.host:
|
||||||
@ -92,29 +93,21 @@ class SessionStartOperator(bpy.types.Operator):
|
|||||||
utils.clean_scene()
|
utils.clean_scene()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
for scene in bpy.data.scenes:
|
||||||
|
scene_uuid = client.add(scene)
|
||||||
|
client.commit(scene_uuid)
|
||||||
|
|
||||||
client.host(
|
client.host(
|
||||||
id=settings.username,
|
id=settings.username,
|
||||||
address=settings.ip,
|
address=settings.ip,
|
||||||
port=settings.port,
|
port=settings.port,
|
||||||
ttl_port=settings.ttl_port,
|
ttl_port=settings.ttl_port)
|
||||||
right_strategy=settings.right_strategy
|
|
||||||
)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.report({'ERROR'}, repr(e))
|
self.report({'ERROR'}, repr(e))
|
||||||
logger.error(f"Error: {e}")
|
logger.error(f"Error: {e}")
|
||||||
|
|
||||||
settings.is_admin = True
|
settings.is_admin = True
|
||||||
|
|
||||||
time.sleep(2) # Removed as soon as server will be launched from replication
|
|
||||||
|
|
||||||
for scene in bpy.data.scenes:
|
|
||||||
scene_uuid = client.add(scene)
|
|
||||||
|
|
||||||
# for node in client.list():
|
|
||||||
client.commit(scene_uuid)
|
|
||||||
# Push all added values
|
|
||||||
client.push_all()
|
|
||||||
|
|
||||||
# Join a session
|
# Join a session
|
||||||
else:
|
else:
|
||||||
utils.clean_scene()
|
utils.clean_scene()
|
||||||
@ -130,13 +123,12 @@ class SessionStartOperator(bpy.types.Operator):
|
|||||||
self.report({'ERROR'}, repr(e))
|
self.report({'ERROR'}, repr(e))
|
||||||
logger.error(f"Error: {e}")
|
logger.error(f"Error: {e}")
|
||||||
|
|
||||||
|
# Background client updates service
|
||||||
|
#TODO: Refactoring
|
||||||
delayables.append(delayable.ClientUpdate())
|
delayables.append(delayable.ClientUpdate())
|
||||||
delayables.append(delayable.DrawClient())
|
delayables.append(delayable.DrawClient())
|
||||||
delayables.append(delayable.DynamicRightSelectTimer())
|
delayables.append(delayable.DynamicRightSelectTimer())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Launch drawing module
|
# Launch drawing module
|
||||||
if settings.enable_presence:
|
if settings.enable_presence:
|
||||||
presence.renderer.run()
|
presence.renderer.run()
|
||||||
@ -408,6 +400,7 @@ class ApplyArmatureOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
if event.type == 'TIMER':
|
if event.type == 'TIMER':
|
||||||
global client
|
global client
|
||||||
|
if client.state == STATE_ACTIVE:
|
||||||
nodes = client.list(filter=bl_types.bl_armature.BlArmature)
|
nodes = client.list(filter=bl_types.bl_armature.BlArmature)
|
||||||
|
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
|
@ -229,7 +229,7 @@ class SESSION_UL_users(bpy.types.UIList):
|
|||||||
if user:
|
if user:
|
||||||
ping = str(user['latency'])
|
ping = str(user['latency'])
|
||||||
metadata = user.get('metadata')
|
metadata = user.get('metadata')
|
||||||
if metadata:
|
if metadata and 'frame_current' in metadata:
|
||||||
frame_current = str(metadata['frame_current'])
|
frame_current = str(metadata['frame_current'])
|
||||||
|
|
||||||
split = layout.split(factor=0.5)
|
split = layout.split(factor=0.5)
|
||||||
|
Reference in New Issue
Block a user