This repository has been archived on 2023-05-12. You can view files and clone it, but cannot push or open issues or pull requests.
aiosched/tests/proxy.py

40 lines
1.1 KiB
Python

import aiosched
import socket
# Pls notice me njsmith senpai :>
async def proxy_one_way(source: aiosched.socket.AsyncSocket, sink: aiosched.socket.AsyncSocket):
while True:
data = await source.receive(1024)
if not data:
await sink.shutdown(socket.SHUT_WR)
break
await sink.send_all(data)
async def proxy_two_way(a: aiosched.socket.AsyncSocket, b: aiosched.socket.AsyncSocket):
async with aiosched.create_pool() as pool:
await pool.spawn(proxy_one_way, a, b)
await pool.spawn(proxy_one_way, b, a)
async def main():
print("Starting two-way proxy server")
async with aiosched.skip_after(10):
a = aiosched.socket.socket(socket.AF_INET, socket.SOCK_STREAM)
b = aiosched.socket.socket(socket.AF_INET, socket.SOCK_STREAM)
await a.connect(("localhost", 12345))
await b.connect(("localhost", 54321))
async with a, b:
await proxy_two_way(a, b)
print("Two-way proxy shutting down")
try:
aiosched.run(main)
except KeyboardInterrupt:
print(f"Ctrl+C caught")