Пример #1
0
 def poll(cls, context):
     room_index = get_mixer_props().room_index
     return (is_client_connected()
             and room_index < len(get_mixer_props().rooms)
             and (get_mixer_props().rooms[room_index].users_count == 0))
Пример #2
0
 def poll(cls, context):
     mixer_props = get_mixer_props()
     return (is_client_connected()
             and os.path.exists(mixer_props.upload_room_filepath)
             and mixer_props.upload_room_name
             not in share_data.client.rooms_attributes)
Пример #3
0
 def poll(cls, context):
     return is_client_connected()
Пример #4
0
import os
import sys
import socket
import subprocess

import bpy

from mixer.share_data import share_data
from mixer.bl_utils import get_mixer_props, get_mixer_prefs
from mixer.stats import save_statistics
from mixer.broadcaster.common import RoomAttributes, ClientAttributes
from mixer.connection import is_client_connected, connect, join_room, leave_current_room, disconnect

logger = logging.getLogger(__name__)

poll_is_client_connected = (lambda: is_client_connected(),
                            "Client not connected")
poll_already_in_a_room = (lambda: not share_data.client.current_room,
                          "Already in a room")


def generic_poll(cls, context):
    for func, _reason in cls.poll_functors(context):
        if not func():
            return False
    return True


def generic_description(cls, context, properties):
    result = cls.__doc__
    for func, reason in cls.poll_functors(context):
Пример #5
0
 def poll(cls, context):
     return is_client_connected(
     ) and share_data.client.current_room is not None
Пример #6
0
    def execute(self, context):
        bpy.data.window_managers["WinMan"].mixer.send_bake_meshes = True

        mixer_prefs = get_mixer_prefs()
        if not share_data.client or not share_data.client.current_room:
            timeout = 10
            try:
                connect()
            except Exception as e:
                self.report({"ERROR"}, f"vrtist.launch connect error : {e!r}")
                return {"CANCELLED"}

            # Wait for local server creation
            while timeout > 0 and not is_client_connected():
                time.sleep(0.5)
                timeout -= 0.5
            if timeout <= 0:
                self.report({"ERROR"},
                            "vrtist.launch connect error : unable to connect")
                return {"CANCELLED"}

            logger.warning("LaunchVRtistOperator.execute({mixer_prefs.room})")
            shared_folders = []
            for item in mixer_prefs.shared_folders:
                shared_folders.append(item.shared_folder)
            mixer_prefs.ignore_version_check = True
            join_room(mixer_prefs.room, True, shared_folders,
                      mixer_prefs.ignore_version_check)

            # Wait for room creation/join
            timeout = 10
            while timeout > 0 and share_data.client.current_room is None:
                time.sleep(0.5)
                timeout -= 0.5
            if timeout <= 0:
                self.report(
                    {"ERROR"},
                    "vrtist.launch connect error : unable to join room")
                return {"CANCELLED"}

            # Wait for client id
            timeout = 10
            while timeout > 0 and share_data.client.client_id is None:
                network_consumer_timer()
                time.sleep(0.1)
                timeout -= 0.1
            if timeout <= 0:
                self.report({
                    "ERROR"
                }, "vrtist.launch connect error : unable to retrieve client id"
                            )
                return {"CANCELLED"}

        color = share_data.client.clients_attributes[
            share_data.client.client_id].get(ClientAttributes.USERCOLOR,
                                             (0.0, 0.0, 0.0))
        color = (int(c * 255) for c in color)
        color = "#" + "".join(f"{c:02x}" for c in color)
        name = "VR " + share_data.client.clients_attributes[
            share_data.client.client_id].get(ClientAttributes.USERNAME,
                                             "client")

        args = [
            mixer_prefs.VRtist,
            "--room",
            share_data.client.current_room,
            "--hostname",
            mixer_prefs.host,
            "--port",
            str(mixer_prefs.port),
            "--master",
            str(share_data.client.client_id),
            "--usercolor",
            color,
            "--username",
            name,
        ]
        LaunchVRtistOperator.vrtist_process = subprocess.Popen(
            args,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            shell=False)
        return {"FINISHED"}
Пример #7
0
from mixer.share_data import share_data
from mixer.bl_utils import get_mixer_props, get_mixer_prefs
from mixer.broadcaster.common import RoomAttributes, ClientAttributes
from mixer.connection import (
    is_client_connected,
    connect,
    create_room,
    join_room,
    leave_current_room,
    disconnect,
    network_consumer_timer,
)

logger = logging.getLogger(__name__)

poll_is_client_connected = (lambda: is_client_connected(),
                            "Client not connected")
poll_already_in_a_room = (
    lambda: not is_client_connected() or not share_data.client.current_room,
    "Already in a room")


class SharedFoldersAddFolderOperator(bpy.types.Operator, ImportHelper):
    bl_idname = "mixer.add_shared_folder"
    bl_label = "Add Shared Folder"
    filepath: bpy.props.StringProperty(subtype="DIR_PATH")

    def execute(self, context):

        path = self.filepath
        if not Path(path).is_dir():
Пример #8
0
from mixer.bl_utils import get_mixer_props, get_mixer_prefs
from mixer.broadcaster.common import RoomAttributes, ClientAttributes
from mixer.connection import (
    is_client_connected,
    connect,
    create_room,
    join_room,
    leave_current_room,
    disconnect,
    network_consumer_timer,
)

logger = logging.getLogger(__name__)


poll_is_client_connected = (lambda: is_client_connected(), "Client not connected")
poll_already_in_a_room = (lambda: not is_client_connected() or not share_data.client.current_room, "Already in a room")


class SharedFoldersAddFolderOperator(bpy.types.Operator, ImportHelper):
    bl_idname = "mixer.add_shared_folder"
    bl_label = "Add Shared Folder"
    filepath: bpy.props.StringProperty(subtype="DIR_PATH")

    def execute(self, context):

        path = self.filepath
        if not Path(path).is_dir():
            path = str(Path(path).parent)

        for item in get_mixer_prefs().shared_folders:
Пример #9
0
import sys
import socket
import subprocess

import bpy

from mixer.share_data import share_data
from mixer.bl_utils import get_mixer_props, get_mixer_prefs
from mixer.stats import save_statistics
from mixer.broadcaster.common import RoomAttributes, ClientAttributes
from mixer.connection import is_client_connected, connect, join_room, leave_current_room, disconnect

logger = logging.getLogger(__name__)


poll_is_client_connected = (lambda: is_client_connected(), "Client not connected")
poll_already_in_a_room = (lambda: not share_data.client.current_room, "Already in a room")


def generic_poll(cls, context):
    for func, _reason in cls.poll_functors(context):
        if not func():
            return False
    return True


def generic_description(cls, context, properties):
    result = cls.__doc__
    for func, reason in cls.poll_functors(context):
        if not func():
            result += f" (Error: {reason})"