working on getting mobile to be 2way peer

macdev
quadrismegistus 4 years ago
parent c850d9894f
commit 7c2dc42ad8

@ -6,6 +6,7 @@ DEFAULT_SCREEN='profile'
HORIZONTAL = False
WINDOW_SIZE = (1136,640) if HORIZONTAL else (640,1136)
# imports
from kivy.uix.screenmanager import Screen,ScreenManager
from kivymd.app import MDApp
@ -39,6 +40,8 @@ from kivy.uix.image import Image
import sys
sys.path.append("..") # Adds higher directory to python modules path.
from p2p import p2p,crypto,api
from kivy.event import EventDispatcher
import threading,asyncio
Window.size = WINDOW_SIZE
@ -114,6 +117,21 @@ def draw_background(widget, img_fn='assets/bg.png'):
tex_coords=(0, 0, nx, 0, nx, ny, 0, ny))
#### LOOPER
class MainApp(MDApp):
title = 'Komrade'
logged_in=False
@ -125,6 +143,12 @@ class MainApp(MDApp):
# # connect to kad?
# self.node = p2p.connect()
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.event_loop_worker = None
def get_session(self):
# return get_async_tor_proxy_session()
@ -142,6 +166,7 @@ class MainApp(MDApp):
# self.texture = Image(source='assets/bg.png').texture
# self.texture.wrap = 'clamp_to_edge'
# self.texture.uvsize = (-2, -2)
# self.start_event_loop_thread()
with open('log.txt','w') as of: of.write('## LOG ##\n')
self.load_store()
@ -182,6 +207,34 @@ class MainApp(MDApp):
self.root.change_screen(DEFAULT_SCREEN)
return self.root
# ## LOOP
# def start_event_loop_thread(self):
# """Start the asyncio event loop thread. Bound to the top button."""
# if self.event_loop_worker is not None:
# return
# #self.root.ids.btn.text = ("Running the asyncio EventLoop now...\n\n\n\n"
# # "Now enter a few words below.")
# self.event_loop_worker = worker = EventLoopWorker()
# #pulse_listener_label = self.root.ids.pulse_listener
# #def display_on_pulse(instance, text):
# # pulse_listener_label.text = text
# # make the label react to the worker's `on_pulse` event:
# #worker.bind(on_pulse=display_on_pulse)
# worker.start()
# def submit_pulse_text(self, text):
# """Send the TextInput string over to the asyncio event loop worker."""
# worker = self.event_loop_worker
# if worker is not None:
# loop = self.event_loop_worker.loop
# # use the thread safe variant to run it on the asyncio event loop:
# loop.call_soon_threadsafe(worker.set_pulse_text, text)
def load_store(self):
if not self.store.exists('user'): return
userd=self.store.get('user')

@ -19,36 +19,64 @@ from functools import partial
# works better with tor?
import json
jsonify = json.dumps
from main import log
# Start server
DEBUG = True
UPLOAD_DIR = 'uploads/'
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
NODES_PRIME = [("128.232.229.63",8468), ("68.66.241.111",8468)]
PORT_SPEAK = 8468
PORT_LISTEN = 8469
# Api Functions
from threading import Thread
from .p2p import boot_selfless_node
def start_selfless_thread():
async def _go():
loop=asyncio.get_event_loop()
return boot_selfless_node(port=PORT_SPEAK, loop=loop)
return asyncio.run(_go())
class Api(object):
def __init__(self,app_storage):
#self.connect()
self.app_storage = app_storage
#self.node = self.connect()
log('starting selfless daemon...')
self.selfless = Thread(target=start_selfless_thread)
self.selfless.daemon = True
self.selfless.start()
pass
# def connect(self):
#from .p2p import connect
#self.node = connect()
def connect(self):
log('connecting...')
async def _connect():
from .kad import KadServer
log('starting server..')
node = KadServer() #storage=HalfForgetfulStorage())
await node.listen(PORT_LISTEN)
await node.bootstrap(NODES_PRIME)
return node
return asyncio.run(_connect())
def get(self,key_or_keys):
from .kad import KadServer
async def _get():
node = KadServer() #storage=HalfForgetfulStorage())
await node.listen(PORT_LISTEN)
await node.bootstrap(NODES_PRIME)
if not hasattr(self,'node'):
self.node = node = KadServer() #storage=HalfForgetfulStorage())
await node.listen(PORT_LISTEN)
await node.bootstrap(NODES_PRIME)
# node=self.node
else:
node = self.node
if type(key_or_keys) in {list,tuple,dict}:
keys = key_or_keys
@ -62,8 +90,6 @@ class Api(object):
node.stop()
return res
#loop = asyncio.get_event_loop()
#return loop.run_until_complete(_get)
return asyncio.run(_get())

@ -152,3 +152,4 @@ class KadServer(Server):
pass

@ -6,54 +6,14 @@ import shelve
from collections import OrderedDict
import pickle,os
NODES_PRIME = [("128.232.229.63",8468), ("68.66.241.111",8468)]
# NODES_PRIME = [("128.232.229.63",8468), ("68.66.241.111",8468)]
def start_udp_tcp_bridge():
from twisted.internet.protocol import Protocol, Factory, DatagramProtocol
from twisted.internet import reactor
class TCPServer(Protocol):
def connectionMade(self):
self.port = reactor.listenUDP(8000, UDPServer(self))
def connectionLost(self, reason):
self.port.stopListening()
# class UDPServer(DatagramProtocol):
# def __init__(self, stream):
# self.stream = stream
# def datagramReceived(self, datagram, address):
# self.stream.transport.write(datagram)
async def tcp_echo_client(message):
reader, writer = await asyncio.open_connection(
'127.0.0.1', 8888)
for n in range(5):
print(f'Send: {message!r}')
writer.write(message.encode())
await writer.drain()
import time
await asyncio.sleep(1)
#data = await reader.read(100)
#print(f'Received: {data.decode()!r}')
#asyncio.sleep(1)
print('Close the connection')
#writer.close()
#await writer.wait_closed()
NODES_PRIME = [("68.66.241.111",8468)]
async def echo(msg):
print('echo',msg)
def boot_selfless_node(port=8468):
def boot_selfless_node(port=8468, loop=None):
handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
@ -61,30 +21,34 @@ def boot_selfless_node(port=8468):
log.addHandler(handler)
log.setLevel(logging.INFO)
loop = asyncio.get_event_loop()
if not loop: loop = asyncio.get_event_loop()
loop.set_debug(True)
# loop.create_task(tcp_echo_client('hello'))
# loop.create_task(echo('hello??'))
# ## UDP <-> TCP bridge
# print("Starting datagram proxy...")
# coro = start_datagram_proxy(bind, port, remote_host, remote_port)
# transport, _ = loop.run_until_complete(coro)
# print("Datagram proxy is running on " + str(port))
# shelf = HalfForgetfulStorage()
shelf = None
print('starting kad server')
#server = Server(storage=shelf)
from kad import KadServer,HalfForgetfulStorage
try:
from kad import KadServer,HalfForgetfulStorage
except ImportError:
from .kad import KadServer,HalfForgetfulStorage
server = KadServer(storage=HalfForgetfulStorage())
loop.run_until_complete(server.listen(port))
loop.create_task(server.listen(port))
# try:
# loop.run_forever()
# except KeyboardInterrupt:
# pass
# finally:
# server.stop()
# loop.close()
return loop
def boot_lonely_selfless_node(port=8467):
loop = boot_selfless_node(port)
try:
loop.run_forever()
except KeyboardInterrupt:
@ -93,28 +57,7 @@ def boot_selfless_node(port=8468):
server.stop()
loop.close()
def start_second_node(port=8467):
start_first_node(port=port)
# def connect():
# # host="0.0.0.0"
# async def run():
# # Create a node and start listening on port 5678
# node = Server(storage=HalfForgetfulStorage())
# await node.listen(8469)
# # Bootstrap the node by connecting to other known nodes, in this case
# # replace 123.123.123.123 with the IP of another node and optionally
# # give as many ip/port combos as you can for other nodes.
# await node.bootstrap(NODES_PRIME)
# # set a value for the key "my-key" on the network
# #await node.set("my-key2", "my awesome value")
# # get the value associated with "my-key" from the network
# #result = await node.get("my-key2")
# # print(result)
# return node
# return asyncio.run(run())

@ -1 +1 @@
python -c "import p2p; p2p.boot_selfless_node()"
python -c "import p2p; p2p.boot_lonely_selfless_node()"
Loading…
Cancel
Save