Add StreamAcceptor context manager

master
Viktor Villainov 2018-12-26 16:35:29 -05:00
parent b1b04d5a2d
commit 33f96c066f
No known key found for this signature in database
GPG Key ID: 8EB38B46F33BAF2F
2 changed files with 39 additions and 1 deletions

View File

@ -12,7 +12,7 @@ from .sam import Destination, PrivateKey
from .aiosam import (
get_sam_socket, dest_lookup, new_destination,
create_session, stream_connect, stream_accept,
Session, StreamConnection
Session, StreamConnection, StreamAcceptor
)
from .tunnel import ClientTunnel, ServerTunnel

View File

@ -232,3 +232,41 @@ class StreamConnection:
async def __aexit__(self, exc_type, exc, tb):
### TODO handle exceptions
self.writer.close()
class StreamAcceptor:
"""Async stream acceptor context manager.
:param session_name: Session nick name
:param sam_address: (optional) SAM API address
:param loop: (optional) Event loop instance
:return: :class:`i2plib.StreamAcceptor` object
"""
def __init__(self, session_name, sam_address=i2plib.sam.DEFAULT_ADDRESS,
loop=None):
self.session_name = session_name
self.sam_address = sam_address
self.loop = loop
async def __aenter__(self):
self.reader, self.writer = await stream_accept(self.session_name,
sam_address=self.sam_address, loop=self.loop)
return self
async def read(self, length):
"""Read data from socket
:param length: buffer length
:return: data
"""
return await self.reader.read(length)
def write(self, data):
"""Write data to socket
:param data: data
"""
self.writer.write(data)
async def __aexit__(self, exc_type, exc, tb):
### TODO handle exceptions
self.writer.close()