def getEchoe(self, request, socketTCP): variable = request[Define.variable] timestamp = request[Define.timestamp] if not self.shouldEcho(variable, timestamp, request[Define.client_id]): response = dict(server_id=self.ID, plataform=Define.plataform, request_code=request[Define.request_code], status=Define.error, msg=Define.timestamp_already_echoed) responseJSON = json.dumps(response) else: data_signature = Signature.signData( Signature.getPrivateKey(self.ID, -1, self.CERT_PATH), variable + str(timestamp)) with self.LOCK: self.ECHOED_VALUES.append( (timestamp, variable, request[Define.client_id])) dataDict = dict(data_signature=data_signature) response = dict(server_id=self.ID, plataform=Define.plataform, request_code=request[Define.request_code], status=Define.success, msg=Define.get_echoe, data=dataDict) responseJSON = json.dumps(response) socketTCP.send(responseJSON.encode('utf-8')) if self.VERBOSE == 2: print('-----REQUEST SAINDO:-----' + responseJSON)
def write(self, value): timestamp = self.readTimestamp() timestamp = self.incrementTimestamp(timestamp) data_signature = Signature.signData( Signature.getPrivateKey(-1, self.ID, self.CERT_PATH), value + str(timestamp)) for server in self.SERVERS: threading.Thread(target=self.writeOnServer, args=(server, value, timestamp, data_signature, self.ID, self.REQUEST_CODE)).start() self.REQUEST_CODE = self.REQUEST_CODE + 1
def write(self, request, socketTCP, type): variable = request[Define.variable] timestamp = request[Define.timestamp] client_id = request[Define.client_id] echoesArray = request[Define.echoes] echoes = [] for dictionary in echoesArray: echoes.append((dictionary[Define.server_id], dictionary[Define.data_signature])) self.LOCK.acquire() if timestamp > self.TIMESTAMP or (timestamp == self.TIMESTAMP and client_id > self.CLIENT_ID): if self.isEchoValid(echoes, variable, timestamp, type): self.VARIABLE = variable self.TIMESTAMP = timestamp self.DATA_SIGNATURE = Signature.signData( Signature.getPrivateKey(self.ID, -1, self.CERT_PATH), variable + str(timestamp)) self.LOCK.release() if self.VERBOSE > 0: print("Recebido variable = " + variable + " e timestamp " + str(timestamp)) response = dict(server_id=self.ID, plataform=Define.plataform, request_code=request[Define.request_code], status=Define.success, msg=Define.variable_updated) responseJSON = json.dumps(response) socketTCP.send(responseJSON.encode('utf-8')) if self.VERBOSE == 2: print('-----REQUEST SAINDO:-----' + responseJSON) else: self.LOCK.release() response = dict(server_id=self.ID, plataform=Define.plataform, request_code=request[Define.request_code], status=Define.error, msg=Define.invalid_echoes) responseJSON = json.dumps(response) socketTCP.send(responseJSON.encode('utf-8')) if self.VERBOSE == 2: print('-----REQUEST SAINDO:-----' + responseJSON) else: self.LOCK.release() response = dict(server_id=self.ID, plataform=Define.plataform, request_code=request[Define.request_code], status=Define.error, msg=Define.outdated_timestamp) responseJSON = json.dumps(response) socketTCP.send(responseJSON.encode('utf-8')) if self.VERBOSE == 2: print('-----REQUEST SAINDO:-----' + responseJSON)