|
|
|
@ -3,12 +3,22 @@ import threading
|
|
|
|
|
import json
|
|
|
|
|
import struct
|
|
|
|
|
import dcs.tests.config
|
|
|
|
|
import dcs.tests.database as database
|
|
|
|
|
from loguru import logger
|
|
|
|
|
from dcs.tests.spider import Spider
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_response(response):
|
|
|
|
|
response_binary = json.JSONEncoder().encode(response).encode("utf-8")
|
|
|
|
|
response_binary_len = len(response_binary)
|
|
|
|
|
response_binary_len_binary = struct.pack("!Q", response_binary_len)
|
|
|
|
|
response_binary = response_binary_len_binary + response_binary
|
|
|
|
|
|
|
|
|
|
return response_binary
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RequestHandler(threading.Thread):
|
|
|
|
|
def __init__(self, file_server: 'FileServer', client_socket: 'socket.socket', request_map: 'dict'):
|
|
|
|
|
def __init__(self, file_server, client_socket: 'socket.socket', request_map: 'dict'):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.file_server = file_server
|
|
|
|
|
self.client_socket = client_socket
|
|
|
|
@ -16,62 +26,77 @@ class RequestHandler(threading.Thread):
|
|
|
|
|
self.daemon = True
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def test(self):
|
|
|
|
|
logger.info(f"[REQUEST] test")
|
|
|
|
|
response = {
|
|
|
|
|
'test': 'hello TEST'
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] test: {response['test']}")
|
|
|
|
|
|
|
|
|
|
def translate(self):
|
|
|
|
|
logger.info(f"[REQUEST] translate")
|
|
|
|
|
spider = Spider(self.request_map['word'])
|
|
|
|
|
response = {
|
|
|
|
|
'translate': spider.run()
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] translate: {response['translate']}")
|
|
|
|
|
|
|
|
|
|
def crawl_zhiwang(self):
|
|
|
|
|
logger.info(f"[REQUEST] crawl zhiwang")
|
|
|
|
|
spider = Spider(self.request_map['word'])
|
|
|
|
|
spider.run()
|
|
|
|
|
response = {
|
|
|
|
|
'crawl zhiwang': 'success' # TODO
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] crawl zhiwang: {response['crawl zhiwang']}")
|
|
|
|
|
|
|
|
|
|
def report_state(self, state):
|
|
|
|
|
logger.info(f"[REQUEST] report free")
|
|
|
|
|
if self.request_map['spider_info'] not in dcs.tests.config.get_free_spiders():
|
|
|
|
|
dcs.tests.config.add_free_spider(self.request_map['spider_info'])
|
|
|
|
|
response = {
|
|
|
|
|
'report_free': 'success marked ' + str(self.request_map['spider_info'])
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] report free: {response['report_free']}")
|
|
|
|
|
|
|
|
|
|
def login(self, user, password):
|
|
|
|
|
logger.info(f"[REQUEST] login")
|
|
|
|
|
database.mysql_conn()
|
|
|
|
|
response = database.login(user, password)
|
|
|
|
|
response = {
|
|
|
|
|
'login': response
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] login: {response['login']}")
|
|
|
|
|
|
|
|
|
|
def register(self, user, password):
|
|
|
|
|
logger.info(f"[REQUEST] register")
|
|
|
|
|
database.mysql_conn()
|
|
|
|
|
response = database.register(user, password)
|
|
|
|
|
response = {
|
|
|
|
|
'register': response
|
|
|
|
|
}
|
|
|
|
|
self.client_socket.sendall(generate_response(response))
|
|
|
|
|
logger.info(f"[RESPONSE] register: {response['register']}")
|
|
|
|
|
|
|
|
|
|
def run(self) -> None:
|
|
|
|
|
try:
|
|
|
|
|
if self.request_map['action'] == 'test':
|
|
|
|
|
logger.info(f"[REQUEST] test")
|
|
|
|
|
response = {
|
|
|
|
|
'test': 'hello TEST'
|
|
|
|
|
}
|
|
|
|
|
response_binary = json.JSONEncoder().encode(response).encode("utf-8")
|
|
|
|
|
response_binary_len = len(response_binary)
|
|
|
|
|
response_binary_len_binary = struct.pack("!Q", response_binary_len)
|
|
|
|
|
|
|
|
|
|
response_binary = response_binary_len_binary + response_binary
|
|
|
|
|
self.client_socket.sendall(response_binary)
|
|
|
|
|
logger.info(f"[RESPONSE] test: {response['test']}, header size: {response_binary_len}")
|
|
|
|
|
self.test()
|
|
|
|
|
elif self.request_map['action'] == 'translate':
|
|
|
|
|
logger.info(f"[REQUEST] translate")
|
|
|
|
|
spider = Spider(self.request_map['word'])
|
|
|
|
|
response = {
|
|
|
|
|
'translate': spider.run()
|
|
|
|
|
}
|
|
|
|
|
response_binary = json.JSONEncoder().encode(response).encode("utf-8")
|
|
|
|
|
response_binary_len = len(response_binary)
|
|
|
|
|
response_binary_len_binary = struct.pack("!Q", response_binary_len)
|
|
|
|
|
|
|
|
|
|
response_binary = response_binary_len_binary + response_binary
|
|
|
|
|
self.client_socket.sendall(response_binary)
|
|
|
|
|
logger.info(f"[RESPONSE] translate: {response['translate']}, header size: {response_binary_len}")
|
|
|
|
|
self.translate()
|
|
|
|
|
elif self.request_map['action'] == 'crawl zhiwang':
|
|
|
|
|
logger.info(f"[REQUEST] crawl zhiwang")
|
|
|
|
|
spider = Spider(self.request_map['word'])
|
|
|
|
|
spider.run()
|
|
|
|
|
response = {
|
|
|
|
|
'crawl zhiwang': 'success' # TODO
|
|
|
|
|
}
|
|
|
|
|
response_binary = json.JSONEncoder().encode(response).encode("utf-8")
|
|
|
|
|
response_binary_len = len(response_binary)
|
|
|
|
|
response_binary_len_binary = struct.pack("!Q", response_binary_len)
|
|
|
|
|
|
|
|
|
|
response_binary = response_binary_len_binary + response_binary
|
|
|
|
|
self.client_socket.sendall(response_binary)
|
|
|
|
|
logger.info(
|
|
|
|
|
f"[RESPONSE] crawl zhiwang: {response['crawl zhiwang']}, header size: {response_binary_len}")
|
|
|
|
|
self.crawl_zhiwang()
|
|
|
|
|
elif self.request_map['action'] == 'report_free':
|
|
|
|
|
logger.info(f"[REQUEST] report free")
|
|
|
|
|
if self.request_map['spider_info'] not in dcs.tests.config.get_free_spiders():
|
|
|
|
|
dcs.tests.config.add_free_spider(self.request_map['spider_info'])
|
|
|
|
|
response = {
|
|
|
|
|
'report_free': 'success marked ' + str(self.request_map['spider_info'])
|
|
|
|
|
}
|
|
|
|
|
response_binary = json.JSONEncoder().encode(response).encode("utf-8")
|
|
|
|
|
response_binary_len = len(response_binary)
|
|
|
|
|
response_binary_len_binary = struct.pack("!Q", response_binary_len)
|
|
|
|
|
|
|
|
|
|
response_binary = response_binary_len_binary + response_binary
|
|
|
|
|
self.client_socket.sendall(response_binary)
|
|
|
|
|
logger.info(
|
|
|
|
|
f"[RESPONSE] report free: {response['report_free']}, header size: {response_binary_len}")
|
|
|
|
|
self.report_state('free')
|
|
|
|
|
elif self.request_map['action'] == 'login':
|
|
|
|
|
self.login(self.request_map['user'], self.request_map['password'])
|
|
|
|
|
elif self.request_map['action'] == 'register':
|
|
|
|
|
self.register(self.request_map['user'], self.request_map['password'])
|
|
|
|
|
finally:
|
|
|
|
|
self.client_socket.close()
|
|
|
|
|
|
|
|
|
|