Coverage for src/stcp/client.mys : 0%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from fiber import Fiber
2from .. import NetError
3from ..secure import Connection as SecureConnection
4from ..secure import Context as SecureContext
5from ..secure import IOHandler
6from ..tcp.client import Client as TcpClient
7from ..tcp.server import Server as TcpServer
8from io import Reader
10class _IOHandler(IOHandler):
11 _tcp_client: TcpClient
13 func __init__(self, tcp_client: TcpClient):
14 self._tcp_client = tcp_client
16 func write(self, data: bytes):
17 self._tcp_client.write(data)
19 func read(self, size: i64) -> bytes:
20 return self._tcp_client.read(size)
22class Client(Reader):
23 """A secure TCP client using SSL/TLS.
25 """
27 _tcp_client: TcpClient
28 _secure_connection: SecureConnection
30 func __init__(self, context: SecureContext = SecureContext()):
31 self._tcp_client = TcpClient()
32 self._secure_connection = SecureConnection(context,
33 _IOHandler(self._tcp_client))
35 func __del__(self):
36 pass
38 func is_connected(self) -> bool:
39 """Returns true if conencted to the server, false otherwise.
41 """
43 return self._secure_connection.is_connected()
45 func connect(self, host: string, port: i64):
46 """Connect to a server using given `host` and `port`.
48 """
50 self._tcp_client.connect(host, port)
51 self._secure_connection.connect()
53 func disconnect(self):
54 """Disconnect from the server.
56 """
58 self._secure_connection.disconnect()
59 self._tcp_client.disconnect()
61 func write(self, data: bytes):
62 """Write data to the server.
64 """
66 self._secure_connection.write(data)
68 func read(self, size: i64) -> bytes:
69 """Read data from the server. Always returns size number of bytes,
70 unless the connection was closed, in which case the remaining
71 data is returned.
72 """
74 return self._secure_connection.read(size)
76# class _ServerCommunicationFiber(Fiber):
77# server: TcpServer
78#
79# func run(self):
80# client = self.server.accept()
81# assert client.is_connected()
82# assert client.read(1) == b"1"
83# assert client.read(9) == b"234567890"
84# client.write(b"0")
85# client.write(b"987654321")
86# assert client.read(1) is None
87# assert not client.is_connected()
88#
89# test server_communication():
90# port = 50232
91#
92# server = TcpServer()
93# server.listen(port)
94# server_fiber = _ServerCommunicationFiber(server)
95# server_fiber.start()
96#
97# client = Client()
98# assert not client.is_connected()
99# client.connect("localhost", port)
100# # assert client.is_connected()
101# # client.write(b"123456789")
102# # client.write(b"0")
103# # assert client.read(9) == b"098765432"
104# # assert client.read(1) == b"1"
105# #
106# # client.disconnect()
107# # assert not client.is_connected()
108# # server_fiber.join()