mirror of
https://github.com/LBRYFoundation/lbry-sdk.git
synced 2025-08-28 16:01:28 +00:00
This will blow your computer wala WIP!!!
This commit is contained in:
parent
5bb0a07fae
commit
0b032c5346
4 changed files with 95 additions and 1 deletions
|
@ -29,6 +29,10 @@ HEADERS_FILE_SHA256_CHECKSUM = (
|
||||||
366295, 'b0c8197153a33ccbc52fb81a279588b6015b68b7726f73f6a2b81f7e25bfe4b9'
|
366295, 'b0c8197153a33ccbc52fb81a279588b6015b68b7726f73f6a2b81f7e25bfe4b9'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if sys.platform == "win32":
|
||||||
|
PIPE_NAME = r'\\.\pipe\lbrypipe'
|
||||||
|
else:
|
||||||
|
PIPE_NAME = './lbrypipe'
|
||||||
|
|
||||||
class Setting(typing.Generic[T]):
|
class Setting(typing.Generic[T]):
|
||||||
|
|
||||||
|
|
|
@ -309,4 +309,7 @@ def main(argv=None):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
asyncio.set_event_loop(asyncio.ProactorEventLoop())
|
||||||
|
|
||||||
sys.exit(main())
|
sys.exit(main())
|
||||||
|
|
|
@ -16,7 +16,7 @@ from functools import wraps
|
||||||
from torba.client.baseaccount import SingleKey, HierarchicalDeterministic
|
from torba.client.baseaccount import SingleKey, HierarchicalDeterministic
|
||||||
|
|
||||||
from lbrynet import __version__, utils
|
from lbrynet import __version__, utils
|
||||||
from lbrynet.conf import Config, Setting, SLACK_WEBHOOK
|
from lbrynet.conf import Config, Setting, SLACK_WEBHOOK, PIPE_NAME
|
||||||
from lbrynet.blob.blob_file import is_valid_blobhash
|
from lbrynet.blob.blob_file import is_valid_blobhash
|
||||||
from lbrynet.blob_exchange.downloader import download_blob
|
from lbrynet.blob_exchange.downloader import download_blob
|
||||||
from lbrynet.error import InsufficientFundsError, DownloadSDTimeout, ComponentsNotStarted
|
from lbrynet.error import InsufficientFundsError, DownloadSDTimeout, ComponentsNotStarted
|
||||||
|
@ -40,6 +40,7 @@ from lbrynet.schema.validator import validate_claim_id
|
||||||
from lbrynet.schema.address import decode_address
|
from lbrynet.schema.address import decode_address
|
||||||
|
|
||||||
if typing.TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
|
from asyncio import transports
|
||||||
from lbrynet.blob.blob_manager import BlobFileManager
|
from lbrynet.blob.blob_manager import BlobFileManager
|
||||||
from lbrynet.dht.node import Node
|
from lbrynet.dht.node import Node
|
||||||
from lbrynet.extras.daemon.Components import UPnPComponent
|
from lbrynet.extras.daemon.Components import UPnPComponent
|
||||||
|
@ -130,6 +131,29 @@ DHT_HAS_CONTACTS = "dht_has_contacts"
|
||||||
WALLET_IS_UNLOCKED = "wallet_is_unlocked"
|
WALLET_IS_UNLOCKED = "wallet_is_unlocked"
|
||||||
|
|
||||||
|
|
||||||
|
class NamedPipeServer(asyncio.Protocol):
|
||||||
|
def __init__(self, request_handler: 'asyncio.coroutine'):
|
||||||
|
self.transport = None
|
||||||
|
self.request_handler = request_handler
|
||||||
|
|
||||||
|
async def handle_pipe_request(self, data):
|
||||||
|
log.info("received data from client %s", str(data))
|
||||||
|
json_response = await self.request_handler(data)
|
||||||
|
self.transport.write(json_response.encode())
|
||||||
|
|
||||||
|
def connection_made(self, transport: 'transports.BaseTransport'):
|
||||||
|
self.transport = transport
|
||||||
|
|
||||||
|
def connection_lost(self, exc: 'Optional[Exception]'):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def data_received(self, data: bytes):
|
||||||
|
asyncio.create_task(self.handle_pipe_request(data))
|
||||||
|
|
||||||
|
def eof_received(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DHTHasContacts(RequiredCondition):
|
class DHTHasContacts(RequiredCondition):
|
||||||
name = DHT_HAS_CONTACTS
|
name = DHT_HAS_CONTACTS
|
||||||
component = DHT_COMPONENT
|
component = DHT_COMPONENT
|
||||||
|
@ -389,6 +413,13 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
await self.analytics_manager.send_server_startup()
|
await self.analytics_manager.send_server_startup()
|
||||||
await self.runner.setup()
|
await self.runner.setup()
|
||||||
|
|
||||||
|
try:
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
await loop.start_serving_pipe(lambda : NamedPipeServer(self.handle_pipe_request), PIPE_NAME)
|
||||||
|
log.info('lbrynet API listening on pipe %s', PIPE_NAME)
|
||||||
|
except Exception as e:
|
||||||
|
log.error(str(e))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
site = web.TCPSite(self.runner, self.conf.api_host, self.conf.api_port)
|
site = web.TCPSite(self.runner, self.conf.api_host, self.conf.api_port)
|
||||||
await site.start()
|
await site.start()
|
||||||
|
@ -430,6 +461,15 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
if self.analytics_manager.is_started:
|
if self.analytics_manager.is_started:
|
||||||
self.analytics_manager.stop()
|
self.analytics_manager.stop()
|
||||||
|
|
||||||
|
async def handle_pipe_request(self, data):
|
||||||
|
data = json.loads(data)
|
||||||
|
ledger = None
|
||||||
|
if 'wallet' in self.component_manager.get_components_status():
|
||||||
|
# self.ledger only available if wallet component is not skipped
|
||||||
|
ledger = self.ledger
|
||||||
|
result = await self._process_rpc_call(data)
|
||||||
|
return jsonrpc_dumps_pretty(result, ledger=ledger)
|
||||||
|
|
||||||
async def handle_old_jsonrpc(self, request):
|
async def handle_old_jsonrpc(self, request):
|
||||||
data = await request.json()
|
data = await request.json()
|
||||||
result = await self._process_rpc_call(data)
|
result = await self._process_rpc_call(data)
|
||||||
|
|
47
scripts/test_script_for_pipes.py
Normal file
47
scripts/test_script_for_pipes.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
import typing
|
||||||
|
|
||||||
|
if typing.TYPE_CHECKING:
|
||||||
|
from typing import Optional
|
||||||
|
from asyncio import transports
|
||||||
|
|
||||||
|
|
||||||
|
path = r'\\.\pipe\lbrypipe'
|
||||||
|
|
||||||
|
class WindowsPipeProtocol(asyncio.Protocol):
|
||||||
|
def __init__(self):
|
||||||
|
self.transport = None
|
||||||
|
self.closed = asyncio.Event()
|
||||||
|
|
||||||
|
def connection_made(self, transport: 'transports.BaseTransport'):
|
||||||
|
self.transport = transport
|
||||||
|
message = {'method': 'account_balance', 'params': {}}
|
||||||
|
message = json.dumps(message)
|
||||||
|
self.transport.write(message.encode())
|
||||||
|
|
||||||
|
def connection_lost(self, exc: 'Optional[Exception]'):
|
||||||
|
self.closed.set()
|
||||||
|
|
||||||
|
def data_received(self, data: bytes):
|
||||||
|
print(data.decode())
|
||||||
|
self.transport.close()
|
||||||
|
self.closed.set()
|
||||||
|
|
||||||
|
def eof_received(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def windows_pipe_factory():
|
||||||
|
return WindowsPipeProtocol
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
transport, protocol = await loop.create_pipe_connection(windows_pipe_factory(), path)
|
||||||
|
await protocol.closed.wait()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.set_event_loop(asyncio.ProactorEventLoop())
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
loop.run_until_complete(main())
|
Loading…
Add table
Reference in a new issue