51 lines
1.6 KiB
Python
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
|