AwinSimpleP2P/provider.py
2025-06-08 23:49:38 +08:00

51 lines
1.6 KiB
Python

from collections import deque
import threading
import logging
from utiles import *
logging.basicConfig(level=logging.DEBUG)
class ServiceConnection:
def __init__(self, conn_id: str, provider_sock: socket.socket, forward_sock: socket.socket, connector_addr: tuple):
self.conn_id = conn_id
self.provider_sock = provider_sock
self.forward_sock = forward_sock
self.connector_addr = connector_addr
self.running = False
def forward_thread(self):
while self.running:
try:
data = self.provider_sock.recv(1024)
pack = Package('data', {'conn_id': self.conn_id}, data)
self.forward_sock.sendto(pack.pack(), self.connector_addr)
except Exception as e:
logging.error(f"收到提供端数据,转发失败: {e}")
break
self.running = False
if self.provider_sock:
self.provider_sock.close()
self.provider_sock = None
return
def backward_data(self, data):
try:
self.provider_sock.sendall(data)
except Exception as e:
logging.error(f"收到客户端数据,转发失败: {e}")
return
def run(self):
self.running = True
threading.Thread(target=self.forward_thread, daemon=True).start()
class ServiceProvider:
def __init__(self, service_name: str, host: str, port: int, sock: socket.socket):
self.service_name = service_name
self.host = host
self.port = port
self.sock = sock