You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
2.0 KiB
46 lines
2.0 KiB
import socket
|
|
import struct
|
|
import threading
|
|
|
|
from loguru import logger
|
|
from dcs.tools.message_process import parse_request, check
|
|
from conf.config import global_var
|
|
|
|
|
|
class RequestHandler(threading.Thread):
|
|
def __init__(self, client_socket: 'socket.socket'):
|
|
super().__init__()
|
|
self.client_socket = client_socket
|
|
|
|
def run(self) -> None:
|
|
try:
|
|
while True:
|
|
try:
|
|
request_map = parse_request(self.client_socket)
|
|
except struct.error:
|
|
break
|
|
except Exception as e:
|
|
logger.error(f'[Error] {e.__class__.__name__}: {str(e)}')
|
|
break
|
|
|
|
if request_map['action'] == 'end':
|
|
logger.info(f"[REQUEST] end: communication over from {self.client_socket.getpeername()}!")
|
|
break
|
|
elif request_map['action'] == 'start':
|
|
logger.info(f"[REQUEST] start: communication begin from {self.client_socket.getpeername()}!")
|
|
elif request_map['action'] == 'crawl zhiwang':
|
|
chk_res = check(request_map)
|
|
if chk_res is None:
|
|
if request_map['cookie'] != 'god':
|
|
logger.warning("[ERROR] user info error!")
|
|
break
|
|
global_var.spider.add_task(request_map, self.client_socket)
|
|
elif request_map['action'] in ['report_free', 'login', 'register']:
|
|
global_var.up.add_request(request_map, self.client_socket)
|
|
else:
|
|
logger.error(f"no action {request_map['action']}!")
|
|
global_var.communicator.add_response('error', self.client_socket,
|
|
{request_map['action']: f"no action {request_map['action']}!"})
|
|
except Exception as e:
|
|
logger.error(f'[Error] {e.__class__.__name__}: {str(e)}')
|