You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
8.1 KiB
152 lines
8.1 KiB
5 years ago
|
# ATTENTION! HERE IS NO Relative import because it will be imported dynamically
|
||
|
# All function check the flag SessionIsWindowResponsibleBool == True else no cammand is processed
|
||
|
# All functions can return None, Bool or Dict { "IsSuccessful": True }
|
||
|
from . import CMDStr # Create CMD Strings
|
||
|
from . import Connector # RDP API
|
||
|
from . import ConnectorExceptions # Exceptions
|
||
|
import time # sleep function
|
||
|
# ATTENTION
|
||
|
gSettings = None # Gsettings will be initialized after the import module
|
||
|
|
||
|
# Create new RDPSession in RobotRDPActive
|
||
|
def RDPSessionConnect(inRDPSessionKeyStr, inHostStr, inPortStr, inLoginStr, inPasswordStr):
|
||
|
lRDPConfigurationItem = { # Init the configuration item
|
||
|
"Host": inHostStr, # Host address, example "77.77.22.22"
|
||
|
"Port": inPortStr, # RDP Port, example "3389"
|
||
|
"Login": inLoginStr, # Login, example "test"
|
||
|
"Password": inPasswordStr, # Password, example "test"
|
||
|
"Screen": {
|
||
|
"Width": 1680, # Width of the remote desktop in pixels, example 1680
|
||
|
"Height": 1050, # Height of the remote desktop in pixels, example 1050
|
||
|
# "640x480" or "1680x1050" or "FullScreen". If Resolution not exists set full screen, example
|
||
|
"FlagUseAllMonitors": False, # True or False, example False
|
||
|
"DepthBit": "32" # "32" or "24" or "16" or "15", example "32"
|
||
|
},
|
||
|
"SharedDriveList": ["c"], # List of the Root sesion hard drives, example ["c"]
|
||
|
###### Will updated in program ############
|
||
|
"SessionHex": "77777sdfsdf77777dsfdfsf77777777", # Hex is created when robot runs, example ""
|
||
|
"SessionIsWindowExistBool": False, # Flag if the RDP window is exist, old name "FlagSessionIsActive". Check every n seconds , example False
|
||
|
"SessionIsWindowResponsibleBool": False, # Flag if RDP window is responsible (recieve commands). Check every nn seconds. If window is Responsible - window is Exist too , example False
|
||
|
"SessionIsIgnoredBool": False # Flag to ignore RDP window False - dont ignore, True - ignore, example False
|
||
|
}
|
||
|
# Add item in RDPList
|
||
|
gSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem
|
||
|
# Create the RDP session
|
||
|
Connector.Session(lRDPConfigurationItem)
|
||
|
return True
|
||
|
|
||
|
# Disconnect the RDP session
|
||
|
def RDPSessionDisconnect(inRDPSessionKeyStr):
|
||
|
global gSettings
|
||
|
lSessionHex = gSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]["SessionHex"]
|
||
|
gSettings["RobotRDPActive"]["RDPList"].pop(inRDPSessionKeyStr,None)
|
||
|
Connector.SessionClose(inSessionHexStr=lSessionHex)
|
||
|
return True
|
||
|
|
||
|
# RDP Session reconnect
|
||
|
def RDPSessionReconnect(inRDPSessionKeyStr):
|
||
|
global gSettings
|
||
|
lRDPConfigurationItem = gSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]
|
||
|
RDPSessionDisconnect(inRDPSessionKeyStr=inRDPSessionKeyStr) # Disconnect the RDP
|
||
|
# Add item in RDPList
|
||
|
gSettings["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr] = lRDPConfigurationItem
|
||
|
# Create the RDP session
|
||
|
Connector.Session(lRDPConfigurationItem)
|
||
|
return True
|
||
|
|
||
|
# Check RDP Session responsibility TODO NEED DEV + TEST
|
||
|
def RDPSessionResponsibilityCheck(inRDPSessionKeyStr):
|
||
|
global gSettings
|
||
|
inGlobalDict = gSettings
|
||
|
lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKeyStr]["SessionHex"]
|
||
|
# set the fullscreen
|
||
|
Connector.SessionScreenFull(inSessionHex=lSessionHex)
|
||
|
time.sleep(1)
|
||
|
# Check RDP responsibility
|
||
|
lDoCheckResponsibilityBool = True
|
||
|
lDoCheckResponsibilityCountMax = 20
|
||
|
lDoCheckResponsibilityCountCurrent = 0
|
||
|
while lDoCheckResponsibilityBool:
|
||
|
# Check if counter is exceed - raise exception
|
||
|
if lDoCheckResponsibilityCountCurrent >= lDoCheckResponsibilityCountMax:
|
||
|
pass
|
||
|
#raise ConnectorExceptions.SessionWindowNotResponsibleError("Error when initialize the RDP session - RDP window is not responding!")
|
||
|
# Check responding
|
||
|
lDoCheckResponsibilityBool = not Connector.SystemRDPIsResponsible()
|
||
|
# Wait if is not responding
|
||
|
if lDoCheckResponsibilityBool:
|
||
|
time.sleep(3)
|
||
|
# increase the couter
|
||
|
lDoCheckResponsibilityCountCurrent+=1
|
||
|
return True
|
||
|
|
||
|
# Start process if it is not running
|
||
|
def RDPSessionProcessStartIfNotRunning(inRDPSessionKey, inProcessName, inFilePath, inFlagGetAbsPath=True):
|
||
|
global gSettings
|
||
|
inGlobalDict = gSettings
|
||
|
lResult = True
|
||
|
lCMDStr = CMDStr.ProcessStartIfNotRunning(inProcessName,inFilePath, inFlagGetAbsPath= inFlagGetAbsPath)
|
||
|
# Calculate the session Hex
|
||
|
lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionHex"]
|
||
|
# Check is Session is responsible
|
||
|
if inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionIsWindowResponsibleBool"]:
|
||
|
# Run CMD
|
||
|
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="RUN")
|
||
|
else:
|
||
|
# Write in logger - warning
|
||
|
inGlobalDict["Logger"].warning(f"Defs_SessionIndex.ProcessStartIfNotRunning: SessionIndex: {str(inRDPSessionKey)}, ProcessName: {inProcessName}:: Session is not responsible!")
|
||
|
lResult = False # Set false result - function has not been done
|
||
|
return lResult
|
||
|
# Create CMD str to stop process
|
||
|
def RDPSessionProcessStop(inRDPSessionKey, inProcessName, inFlagForceClose):
|
||
|
global gSettings
|
||
|
inGlobalDict = gSettings
|
||
|
lResult = True
|
||
|
lCMDStr = f'taskkill /im "{inProcessName}" /fi "username eq %USERNAME%"'
|
||
|
if inFlagForceClose:
|
||
|
lCMDStr+= " /F"
|
||
|
# Calculate the session Hex
|
||
|
lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionHex"]
|
||
|
# Check is Session is responsible
|
||
|
if inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionIsWindowResponsibleBool"]:
|
||
|
# Run CMD
|
||
|
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="RUN")
|
||
|
else:
|
||
|
# TODO Write in logger - warning
|
||
|
inGlobalDict["Logger"].warning(f"Defs_SessionIndex.ProcessStop: SessionIndex: {str(inRDPSessionKey)}, ProcessName: {inProcessName}:: Session is not responsible!")
|
||
|
lResult = False # Set false result - function has not been done
|
||
|
return lResult
|
||
|
# Send file from Host to Session RDP using shared drive in RDP
|
||
|
def RDPSessionFileStoredSend(inRDPSessionKey, inHostFilePath, inRDPFilePath):
|
||
|
global gSettings
|
||
|
inGlobalDict = gSettings
|
||
|
lResult = True
|
||
|
lCMDStr = CMDStr.FileStoredSend(inHostFilePath = inHostFilePath, inRDPFilePath = inRDPFilePath)
|
||
|
# Calculate the session Hex
|
||
|
lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionHex"]
|
||
|
# Check is Session is responsible
|
||
|
if inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionIsWindowResponsibleBool"]:
|
||
|
# Run CMD
|
||
|
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120)
|
||
|
else:
|
||
|
# Write in logger - warning
|
||
|
inGlobalDict["Logger"].warning(f"Defs_SessionIndex.FileStoredSend: SessionIndex: {str(inRDPSessionKey)}, HostFilePath: {inHostFilePath}:: Session is not responsible!")
|
||
|
lResult = False # Set false result - function has not been done
|
||
|
return lResult
|
||
|
# Recieve file from Session RDP to Host using shared drive in RDP
|
||
|
def RDPSessionFileStoredRecieve(inRDPSessionKey, inRDPFilePath, inHostFilePath):
|
||
|
global gSettings
|
||
|
inGlobalDict = gSettings
|
||
|
lResult = True
|
||
|
lCMDStr = CMDStr.FileStoredRecieve(inRDPFilePath = inRDPFilePath, inHostFilePath = inHostFilePath)
|
||
|
# Calculate the session Hex
|
||
|
lSessionHex = inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionHex"]
|
||
|
# Check is Session is responsible
|
||
|
if inGlobalDict["RobotRDPActive"]["RDPList"][inRDPSessionKey]["SessionIsWindowResponsibleBool"]:
|
||
|
# Run CMD
|
||
|
Connector.SessionCMDRun(inSessionHex=lSessionHex, inCMDCommandStr=lCMDStr, inModeStr="LISTEN", inClipboardTimeoutSec = 120)
|
||
|
else:
|
||
|
# Write in logger - warning
|
||
|
inGlobalDict["Logger"].warning(f"Defs_SessionIndex.FileStoredRecieve: SessionIndex: {str(inRDPSessionKey)}, HostFilePath: {inHostFilePath}:: Session is not responsible!")
|
||
|
lResult = False # Set false result - function has not been done
|
||
|
return lResult
|