77 lines
3.3 KiB
Python
77 lines
3.3 KiB
Python
from lnx.logicnode.lnx_nodes import *
|
|
|
|
class CreateLeenkxNode(LnxLogicTreeNode):
|
|
"""Create Leenkx"""
|
|
bl_idname = 'LNCreateLeenkxNode'
|
|
bl_label = 'Create Leenkx'
|
|
bl_description = ('Open a Leenkx peer connection on the given swarm identifier')
|
|
lnx_category = 'Leenkx'
|
|
lnx_version = 1
|
|
|
|
def update_sockets(self, context):
|
|
if not self.inputs:
|
|
return
|
|
links = {}
|
|
for socket in self.inputs:
|
|
for link in socket.links:
|
|
links.setdefault(socket.name, []).append(
|
|
(link.from_node, link.from_socket))
|
|
for socket in self.inputs[2:]:
|
|
self.inputs.remove(socket)
|
|
if (self.property0 == 'datachannel'
|
|
and self.property2 != 'inherit'):
|
|
self.add_input('LnxNodeSocketArray', 'ICE Servers')
|
|
if self.property3 != 'inherit':
|
|
self.add_input('LnxNodeSocketArray', 'Trackers')
|
|
tree = self.id_data
|
|
for socket in self.inputs:
|
|
if socket.name in links:
|
|
for from_node, from_socket in links[socket.name]:
|
|
tree.links.new(from_socket, socket)
|
|
|
|
property0: HaxeEnumProperty('property0',
|
|
items=[('wire', 'Wire', 'BitTorrent wire protocol transport (default)'),
|
|
('datachannel', 'DataChannel', 'WebRTC data channels for browser/krom peers - shows the ICE Servers input')],
|
|
name='Transport', default='wire', update=update_sockets)
|
|
|
|
property1: HaxeBoolProperty('property1',
|
|
name='Gossip', description='Relay mode - forward messages to all connected peers', default=False)
|
|
|
|
property2: HaxeEnumProperty('property2',
|
|
items=[('inherit', 'Inherit', 'Use the built-in STUN server list; no ICE Servers input'),
|
|
('add', 'Add', 'Merge the ICE Servers input on top of the built-in STUN servers'),
|
|
('override', 'Override', 'Replace the ICE server list with the ICE Servers input')],
|
|
name='ICE Servers', default='inherit', update=update_sockets)
|
|
|
|
property3: HaxeEnumProperty('property3',
|
|
items=[('inherit', 'Inherit', 'Use the project torrent tracker list; no Trackers input'),
|
|
('add', 'Add', 'Merge the Trackers input on top of the project tracker list'),
|
|
('override', 'Override', 'Replace the announce tracker list with the Trackers input')],
|
|
name='Trackers', default='inherit', update=update_sockets)
|
|
|
|
def lnx_init(self, context):
|
|
self.add_input('LnxNodeSocketAction', 'In')
|
|
self.add_input('LnxStringSocket', 'Channel', default_value='8001')
|
|
if (self.property0 == 'datachannel'
|
|
and self.property2 != 'inherit'):
|
|
self.add_input('LnxNodeSocketArray', 'ICE Servers')
|
|
if self.property3 != 'inherit':
|
|
self.add_input('LnxNodeSocketArray', 'Trackers')
|
|
|
|
self.add_output('LnxNodeSocketAction', 'Out')
|
|
self.add_output('LnxDynamicSocket', 'Connection')
|
|
self.add_output('LnxDynamicSocket', 'ID')
|
|
|
|
def draw_buttons(self, context, layout):
|
|
layout.prop(self, 'property0')
|
|
layout.prop(self, 'property1')
|
|
if self.property0 == 'datachannel':
|
|
layout.prop(self, 'property2')
|
|
layout.prop(self, 'property3')
|
|
|
|
|
|
def register():
|
|
add_category('Leenkx', icon='ORIENTATION_CURSOR')
|
|
CreateLeenkxNode.on_register()
|
|
|
|
|