From 39402cb15091cd2b400b43660a00d3cae708a7e0 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Sun, 21 Apr 2019 12:43:10 +0300 Subject: [PATCH] =?UTF-8?q?#=D0=9F=D1=80=D0=BE=D1=82=D0=BE=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BA=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BC=D0=B0=D1=88=D0=B8=D0=BD=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RobotDaemon/robotDaemonProcessor.py | 37 ++++++++ Orchestrator/RobotDaemon/robotDaemonServer.py | 86 +++---------------- 2 files changed, 48 insertions(+), 75 deletions(-) create mode 100644 Orchestrator/RobotDaemon/robotDaemonProcessor.py diff --git a/Orchestrator/RobotDaemon/robotDaemonProcessor.py b/Orchestrator/RobotDaemon/robotDaemonProcessor.py new file mode 100644 index 00000000..3370ceda --- /dev/null +++ b/Orchestrator/RobotDaemon/robotDaemonProcessor.py @@ -0,0 +1,37 @@ +import datetime +import http.client +import json +#{ +# actionList: +# [ +# { +# type: , +# host: , +# port: , +# bodyObject: +# } +# ] +# +#} +def ProcessingRun(inConfigurationDict): + lDateTimeString=datetime.datetime.strftime(datetime.datetime.now(),"%Y.%m.%d %H:%M:%S::%f") + lResult={"dateTime":lDateTimeString, "state":"connected", "actionListResult":[]} + + for lItem in inConfigurationDict["actionList"]: + #Добавить входные значения + lResult["actionListResult"].append({"inArgs":lItem}) + #Обработка запроса на отправку команды на удаленную машину + if lItem["type"]=="RemoteMachineProcessingRun": + lHTTPConnection = http.client.HTTPConnection(lItem["host"], lItem["port"], timeout=5) + try: + lHTTPConnection.request("POST","/ProcessingRun",json.dumps(lItem["bodyObject"])) + except Exception as e: + #Объединение словарей + lResult["actionListResult"][-1] = {**lResult["actionListResult"][-1], **{"state":"disconnected","errorMessage":str(e)}} + #lResult["actionListResult"][-1].join({"state":"disconnected","errorMessage":str(e)}) + else: + lHTTPResponse=lHTTPConnection.getresponse() + lHTTPResponseByteArray=lHTTPResponse.read() + lResult["actionListResult"][-1] = {**lResult["actionListResult"][-1], **json.loads(lHTTPResponseByteArray.decode('utf8'))} + #Вернуть результат + return lResult diff --git a/Orchestrator/RobotDaemon/robotDaemonServer.py b/Orchestrator/RobotDaemon/robotDaemonServer.py index e296dd37..5c16eaab 100644 --- a/Orchestrator/RobotDaemon/robotDaemonServer.py +++ b/Orchestrator/RobotDaemon/robotDaemonServer.py @@ -9,6 +9,7 @@ import os import PIL from PIL import ImageGrab from threading import Thread +import robotDaemonProcessor def SaveScreenshot(inFilePath): # grab fullscreen lScreenshot = ImageGrab.grab() @@ -75,7 +76,6 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): if self.path == '/3rdParty/Handlebars/handlebars-v4.1.2.js': self.SendResponseContentTypeFile('application/javascript',"..\\..\\3rdParty\\Handlebars\\handlebars-v4.1.2.js") #Получить скриншот - if self.path.split("?")[0] == '/GetScreenshot': #Сохранить файл на диск SaveScreenshot("Screenshot.png") @@ -90,91 +90,27 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): # Send message back to client message = json.dumps(mJSONConfigurationDict) # Write content as utf-8 data - self.wfile.write(bytes(message, "utf8")) - + self.wfile.write(bytes(message, "utf8")) # POST def do_POST(self): - #Action ObjectInspector GetObjectList - if self.path == '/ObjectDetector/JSONGetWindowListArgs': - #ReadRequest - lInputByteArrayLength = int(self.headers.get('Content-Length')) - lInputByteArray=self.rfile.read(lInputByteArrayLength) - #Превращение массива байт в объект - print(lInputByteArray.decode('utf8')) - lInputObject=json.loads(lInputByteArray.decode('utf8')) - - - # Send response status code - self.send_response(200) - - # Send headers - self.send_header('Content-type','application/json') - self.end_headers() - - # Send message back to client - #{'functionName':'', 'argsArray':[]} - lRequestObject={'functionName':'ElementGetChildElementList','argsArray':lInputObject} - - #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами - #ProcessChildSendObject(p,lRequestObject) - - #Получить ответ от дочернего процесса - #lResponseObject=ProcessChildReadWaitObject(p) - print(str(lResponseObject)) - message = json.dumps(lResponseObject) - - # Write content as utf-8 data - self.wfile.write(bytes(message, "utf8")) - if self.path == '/GUIAction': + #Централизованная функция получения запросов/отправки + if self.path == '/ProcessingRun': #ReadRequest - lInputByteArrayLength = int(self.headers.get('Content-Length')) - lInputByteArray=self.rfile.read(lInputByteArrayLength) - #Превращение массива байт в объект - lInputObject=json.loads(lInputByteArray.decode('utf8')) + lInputObject={} + if self.headers.get('Content-Length') is not None: + lInputByteArrayLength = int(self.headers.get('Content-Length')) + lInputByteArray=self.rfile.read(lInputByteArrayLength) + #Превращение массива байт в объект + lInputObject=json.loads(lInputByteArray.decode('utf8')) # Send response status code self.send_response(200) # Send headers self.send_header('Content-type','application/json') self.end_headers() # Send message back to client - #{'functionName':'', 'argsArray':[]} - #pdb.set_trace() - lRequestObject=lInputObject - #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами - #ProcessChildSendObject(p,lRequestObject) - #Получить ответ от дочернего процесса - #lResponseObject=ProcessChildReadWaitObject(p) - message = json.dumps(lResponseObject) + message = json.dumps(robotDaemonProcessor.ProcessingRun(lInputObject)) # Write content as utf-8 data self.wfile.write(bytes(message, "utf8")) - if self.path == '/GUIActionList': - #ReadRequest - lInputByteArrayLength = int(self.headers.get('Content-Length')) - lInputByteArray=self.rfile.read(lInputByteArrayLength) - #Превращение массива байт в объект - lInputObject=json.loads(lInputByteArray.decode('utf8')) - # Send response status code - self.send_response(200) - # Send headers - self.send_header('Content-type','application/json') - self.end_headers() - # Send message back to client - #{'functionName':'', 'argsArray':[]} - lRequestObject=lInputObject - lOutputObject=[] - #pdb.set_trace() - #Циклическая отправка запросов в дочерний объект - for lItem in lRequestObject: - #Отправить запрос в дочерний процесс, который отвечает за работу с Windows окнами - #ProcessChildSendObject(p,lItem) - #Получить ответ от дочернего процесса - #lResponseObject=ProcessChildReadWaitObject(p) - #Добавить в выходной массив - lOutputObject.append(lResponseObject) - #Сформировать текстовый ответ - message = json.dumps(lOutputObject) - # Write content as utf-8 data - self.wfile.write(bytes(message, "utf8")) return #print(ChildProcessReadWaitString(p))