Source code for maragyoh.views.connector

#! /usr/bin/env python
# -*- coding: UTF8 -*-
# Este arquivo é parte do programa Marayho
# Copyright 2014-2017 Carlo Oliveira <carlo@nce.ufrj.br>,
# `Labase <http://labase.selfip.org/>`__; `GPL <http://j.mp/GNU_GPL3>`__.
#
# Marayho é um software livre; você pode redistribuí-lo e/ou
# modificá-lo dentro dos termos da Licença Pública Geral GNU como
# publicada pela Fundação do Software Livre (FSF); na versão 2 da
# Licença.
#
# Este programa é distribuído na esperança de que possa ser útil,
# mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO
# a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
# Licença Pública Geral GNU para maiores detalhes.
#
# Você deve ter recebido uma cópia da Licença Pública Geral GNU
# junto com este programa, se não, veja em <http://www.gnu.org/licenses/>

"""Connect two instances.

.. moduleauthor:: Carlo Oliveira <carlo@nce.ufrj.br>

.. _modulo_connector:

=========
Connector
=========

"""
try:
    from browser import window
except ImportError:
    from .browser import window


[docs]class Connect: def __init__(self, last, nodeid, remote_action): """A WEBRTC connector manager :param last: An index referencing this node :param nodeid: A string pattern for group address :param remote_action: Action called when message is received """ self.last = self.this = last self.nid = nodeid self.peer = None self.conn = [] self.remote_action = remote_action window.addEventListener("beforeunload", self.leave_connection) print("XXXXXXX>>>> __init__(self, last, nodeid)", last, self.nid % last) self.init_peer(last)
[docs] def send(self, data): """Send message :param data: data for the message :return: """ [conn.send(data) for conn in self.conn]
def _remote_action(self, data=""): self.remote_action(data)
[docs] def init_peer(self, last): self.peer = peer = window.Peer.new(self.nid % last, {'key': '49rhnah5bore8kt9', 'debug': 0}) def do_connect(node_id): print("XXXXXXX>>>> init_peer.channel.do_connect", node_id) conn = peer.connect(node_id) conn.on('data', self.remote_action) return conn peer.on('connection', self.get_connection) self.conn = [do_connect(self.nid % nid) for nid in range(1, last) if nid != self.this]
[docs] def get_connection(self, conn): print("XXXXXXX>>>> get_connection(self, a_node)", str(conn.peer)) if conn.peer not in [cn.peer for cn in self.conn]: print("XXXXXXX>>>> append_connection(self, a_node)", str(conn.peer)) self.conn.append(self.peer.connect(str(conn.peer))) conn.on('data', self.remote_action) conn.send("10 20 30")
[docs] def leave_connection(self, _=0): [conn.close() for conn in self.conn] print("XXXXXXX>>>> leave_connection conn.close()", self.conn)
[docs]def main(last, nodeid, remote_action): Connect(last, nodeid, remote_action)