223 lines
4.6 KiB
Python
223 lines
4.6 KiB
Python
import bpy
|
|
from . import net_components
|
|
import time
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
session = None
|
|
client = None
|
|
server = None
|
|
context = None
|
|
|
|
# SESSION Operators
|
|
|
|
|
|
class join(bpy.types.Operator):
|
|
bl_idname = "session.join"
|
|
bl_label = "join"
|
|
bl_description = "Connect to a net session"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
# global session
|
|
|
|
if session.join():
|
|
bpy.ops.asyncio.loop()
|
|
else:
|
|
print('fail to create session, avorting loop')
|
|
return {"FINISHED"}
|
|
|
|
|
|
class create(bpy.types.Operator):
|
|
bl_idname = "session.create"
|
|
bl_label = "create"
|
|
bl_description = "create to a net session"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global session
|
|
|
|
if session.create():
|
|
bpy.ops.asyncio.loop()
|
|
else:
|
|
print('fail to create session, avorting loop')
|
|
|
|
return {"FINISHED"}
|
|
|
|
|
|
class send(bpy.types.Operator):
|
|
bl_idname = "session.send"
|
|
bl_label = "Send"
|
|
bl_description = "Connect to a net session"
|
|
bl_options = {"REGISTER"}
|
|
|
|
message: bpy.props.StringProperty(default="Hi")
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global session
|
|
|
|
session.send(self.message)
|
|
return {"FINISHED"}
|
|
|
|
|
|
class close(bpy.types.Operator):
|
|
bl_idname = "session.close"
|
|
bl_label = "Close session"
|
|
bl_description = "Connect to a net session"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global session
|
|
|
|
session.close()
|
|
bpy.ops.asyncio.stop()
|
|
return {"FINISHED"}
|
|
|
|
# CLIENT-SERVER
|
|
|
|
|
|
class session_join(bpy.types.Operator):
|
|
bl_idname = "session.join"
|
|
bl_label = "join"
|
|
bl_description = "connect to a net server"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global client
|
|
|
|
client = net_components.Client()
|
|
time.sleep(1)
|
|
|
|
bpy.ops.asyncio.loop()
|
|
|
|
return {"FINISHED"}
|
|
|
|
|
|
class session_send(bpy.types.Operator):
|
|
bl_idname = "session.send"
|
|
bl_label = "send"
|
|
bl_description = "broadcast a message to connected clients"
|
|
bl_options = {"REGISTER"}
|
|
|
|
message: bpy.props.StringProperty(default="Hi")
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global client
|
|
|
|
client.send_msg(self.message)
|
|
|
|
return {"FINISHED"}
|
|
|
|
class session_create(bpy.types.Operator):
|
|
bl_idname = "session.create"
|
|
bl_label = "create"
|
|
bl_description = "create to a net session"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global server
|
|
global client
|
|
|
|
username = str(context.scene.session_settings.username)
|
|
|
|
server = net_components.Server()
|
|
client = net_components.Client(id=username)
|
|
|
|
time.sleep(1)
|
|
|
|
bpy.ops.asyncio.loop()
|
|
|
|
return {"FINISHED"}
|
|
|
|
|
|
class session_stop(bpy.types.Operator):
|
|
bl_idname = "session.stop"
|
|
bl_label = "close"
|
|
bl_description = "stop net service"
|
|
bl_options = {"REGISTER"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return True
|
|
|
|
def execute(self, context):
|
|
global server
|
|
global client
|
|
|
|
if server :
|
|
server.stop()
|
|
del server
|
|
server = None
|
|
if client:
|
|
client.stop()
|
|
del client
|
|
client = None
|
|
bpy.ops.asyncio.stop()
|
|
else:
|
|
logger.info("No server/client running.")
|
|
|
|
return {"FINISHED"}
|
|
|
|
|
|
class session_settings(bpy.types.PropertyGroup):
|
|
username = bpy.props.StringProperty(name="Username",default="DefaultUser")
|
|
ip = bpy.props.StringProperty(name="localhost")
|
|
port = bpy.props.IntProperty(name="5555")
|
|
|
|
# TODO: Rename to match official convention
|
|
classes = (
|
|
session_join,
|
|
session_send,
|
|
session_stop,
|
|
session_create,
|
|
session_settings,
|
|
)
|
|
|
|
|
|
def register():
|
|
from bpy.utils import register_class
|
|
for cls in classes:
|
|
register_class(cls)
|
|
|
|
bpy.types.Scene.session_settings = bpy.props.PointerProperty(type=session_settings)
|
|
|
|
def unregister():
|
|
from bpy.utils import unregister_class
|
|
for cls in reversed(classes):
|
|
unregister_class(cls)
|
|
|
|
del bpy.types.Scene.session_settings
|
|
|
|
|
|
if __name__ == "__main__":
|
|
register()
|