def clientMain(serverIP, serverPort): '''Starts the client Args: - serverIP -- ip address of server to connect to - serverPort -- port on which the server is listening ''' #initialization of values #timeName = time.strftime("%d%b%Y%H%M%S", time.localtime()) # a unique id created from the time when the script starts messageQueue = multiprocessing.Queue() # the queue where all log messages are written to. logControlValue = multiprocessing.Value('i',int(True)) #A boolean indicating the the logging process should continue to run. There is no type for bool, so we use int resultsDirectory, logsDirectory = UtilityFunctions.initializeClientFolderStructure() #directories where results and logs should be stored respectively UtilityFunctions.deleteContentsOfDirectory('./client/temp') #-------------start logging module loggingProcess = multiprocessing.Process(target = LoggingModule.log, args=(logControlValue,messageQueue,logsDirectory)) loggingProcess.start() #communicate with server handleConnection(messageQueue, serverIP,serverPort,resultsDirectory) #exit note that we only get here once the server closes the connection logControlValue.value = int(False) loggingProcess.join() sys.exit(0)
def handleClientTask(messageQueue, serverMessage,resultsDirectory): '''Processes a task received by the server Args: - messageQueue -- queue used for logging - serverMessge -- message received from server ''' temporaryDirectory = './client/temp' if serverMessage['messageType'] == 'task': #write task to file clientScript = zlib.decompress(serverMessage['task'])#decompress the clientScriptHandle = open(os.path.join(temporaryDirectory,'clientTask.py'),'w') clientScriptHandle.writelines(clientScript) clientScriptHandle.close() dataDirectory = None #if data exists, write data to file and extract it to ./temp/receivedData if not serverMessage['data'] == None: dataDirectory = os.path.join(temporaryDirectory,'receivedData') os.mkdir(dataDirectory) dataHandle = open(os.path.join(temporaryDirectory,'data.zip'),'w') dataHandle.writelines(serverMessage['data']) dataHandle.close() UtilityFunctions.unzipFile(os.path.join(temporaryDirectory,'data.zip'), dataDirectory) #execute received script subprocess.call(['python',os.path.join(temporaryDirectory,'clientTask.py'),os.path.abspath(dataDirectory) ,os.path.abspath(resultsDirectory),]) #cleanup temp folder UtilityFunctions.deleteContentsOfDirectory(temporaryDirectory) else: raise Exception('received an unknown Message type from the server. The type received was: '+serverMessage['task'])
def loadResult(resultsDirectory): '''Zips all data in the results directory in a zip file and returns that zip file loaded into memory. Also removes resultsData from disk ''' temporaryDirectory = './client/temp' UtilityFunctions.zipDir(resultsDirectory, os.path.join(temporaryDirectory, 'result.zip')) resultHandle = open(os.path.join(temporaryDirectory, 'result.zip'), 'r') resultData = resultHandle.readlines() resultHandle.close() UtilityFunctions.deleteContentsOfDirectory(temporaryDirectory) UtilityFunctions.deleteContentsOfDirectory(resultsDirectory) return resultData
def loadResult(resultsDirectory): '''Zips all data in the results directory in a zip file and returns that zip file loaded into memory. Also removes resultsData from disk ''' temporaryDirectory = './client/temp' UtilityFunctions.zipDir(resultsDirectory, os.path.join(temporaryDirectory,'result.zip')) resultHandle = open(os.path.join(temporaryDirectory,'result.zip'),'r') resultData = resultHandle.readlines() resultHandle.close() UtilityFunctions.deleteContentsOfDirectory(temporaryDirectory) UtilityFunctions.deleteContentsOfDirectory(resultsDirectory) return resultData
def handleClientTask(messageQueue, serverMessage, resultsDirectory): '''Processes a task received by the server Args: - messageQueue -- queue used for logging - serverMessge -- message received from server ''' temporaryDirectory = './client/temp' if serverMessage['messageType'] == 'task': #write task to file clientScript = zlib.decompress(serverMessage['task']) #decompress the clientScriptHandle = open( os.path.join(temporaryDirectory, 'clientTask.py'), 'w') clientScriptHandle.writelines(clientScript) clientScriptHandle.close() dataDirectory = None #if data exists, write data to file and extract it to ./temp/receivedData if not serverMessage['data'] == None: dataDirectory = os.path.join(temporaryDirectory, 'receivedData') os.mkdir(dataDirectory) dataHandle = open(os.path.join(temporaryDirectory, 'data.zip'), 'w') dataHandle.writelines(serverMessage['data']) dataHandle.close() UtilityFunctions.unzipFile( os.path.join(temporaryDirectory, 'data.zip'), dataDirectory) #execute received script subprocess.call([ 'python', os.path.join(temporaryDirectory, 'clientTask.py'), os.path.abspath(dataDirectory), os.path.abspath(resultsDirectory), ]) #cleanup temp folder UtilityFunctions.deleteContentsOfDirectory(temporaryDirectory) else: raise Exception( 'received an unknown Message type from the server. The type received was: ' + serverMessage['task'])
def cleanUp(): '''Message to be called when server exits successfully, cleans up temporary Files''' UtilityFunctions.deleteContentsOfDirectory('./temp')
def cleanUp(): '''Message to be called when server exits successfully, cleans up temporary Files''' UtilityFunctions.deleteContentsOfDirectory('./temp')