예제 #1
0
    def __init__(self, ip=HOST, port=PORT):
        """
        initializing

        Args:
            ip: server ip
            port: server port
        """
        if ClientModel.__instance != None:
            raise Exception("This class is a singleton!")
        else:
            ClientModel.__instance = self
        #log
        self.logger = MyLogger.getInstance("client.log")
        #server ip and port
        self.ip, self.port = ip, port
        #TCP socket建立
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.connect((self.ip, self.port))
        #建立锁
        self.mutex = threading.Lock()
        #读取服务器公钥
        with open("publicKey.pem", "r") as f:
            self.server_public_key = rsa.PublicKey.load_pkcs1(
                f.read().encode())

        self.Crypto = ClientCrypto()
        self.Crypto.new_rsa(self.server_public_key)
        self.logger.info("client model initializd successfully...")
예제 #2
0
    def handle(self):
        '''
        handle request
        '''
        #log
        self.logger = MyLogger.getInstance("server.log")
        #读取服务器私钥
        with open("privateKey.pem", "r") as f:
            self.private_key = rsa.PrivateKey.load_pkcs1(f.read().encode())
        #服务器加密管理
        self.Crypto = ServerCrypto()
        self.Crypto.new_rsa(self.private_key)
        #服务器数据库管理
        self.db = db(DB_NAME)
        self.db.create_user_table()

        #消息读取循环
        while True:
            #接受客户端数据
            data_spec, data_recv = self.recv_data()
            #若客户端断开则退出
            if not data_recv:
                self.logger.info("client disconnected...")
                break
            #解密
            data_recv = self.Crypto.decrypt(data_spec, data_recv)
            self.logger.info("server received (crypto removed) from client " +
                             str(threading.current_thread()) + ": " +
                             json.dumps(data_recv))

            #客户端登陆处理
            if data_recv["type"] == "req_login":
                self.handle_login(data_recv)
            elif data_recv["type"] == "req_stock_kline":
                self.handle_kline(data_recv)
            elif data_recv["type"] == "req_stock_detail":
                self.handle_detail(data_recv)
            elif data_recv["type"] == "req_stock_list":
                self.handle_list(data_recv)
            elif data_recv["type"] == "live_check":
                self.send_data("2", dict({"type": "live_check"}))
            else:
                self.send_data("2", dict({"type": "error"}))