server.py
280 lines
| 9.0 KiB
| text/x-python
|
PythonLexer
r27 | import os | ||
|
r19 | import library | |
r43 | import time | ||
|
r19 | ||
class ABSServer: | |||
r59 | def __init__(self,ipSource="localhost", ipDestino="192.168.1.117", portDestino=7000, ipDestino2="192.168.1.255", portDestino2=5500, ftpPortDestino=None): | ||
|
r19 | ||
self.ipSource = ipSource | |||
self.ipDestino = ipDestino | |||
self.portDestino = portDestino | |||
self.ipDestino2 = ipDestino2 | |||
self.portDestino2 = portDestino2 | |||
self.ftpPortDestino = ftpPortDestino | |||
r46 | self.experiment_name = "default" | ||
self.tx_buffer = "default" | |||
|
r19 | ||
self.createObjects() | |||
def createObjects(self): | |||
r25 | |||
|
r19 | asServer = True | |
self.commServerObj = library.UDPComm(self.ipSource, self.ipDestino, self.portDestino, asServer) | |||
self.commClientObj = library.UDPComm(self.ipSource, self.ipDestino2, self.portDestino2) | |||
r27 | #self.ftpCommObj = library.FTPComm(self.ipSource, self.ipDestino, self.ftpPortDestino) | ||
r46 | |||
def waitRequest(self): | |||
ipSource, ipDestino, cmd, self.datarx = self.commServerObj.waitData() | |||
datarpta = "OK" | |||
if cmd == "SNDF": | |||
self.sendFile2Modules() | |||
r59 | pass | ||
r46 | |||
if cmd == "CHGB": | |||
self.changeBeam() | |||
if cmd == "ANST": | |||
r54 | self.getStatus(mode=3) | ||
r46 | datarpta = self.tx_buffer | ||
r54 | self.commServerObj.sendData(cmd=cmd, data=datarpta) | ||
r46 | |||
r54 | def checkModule(self, address): | ||
cmd = "ping -c 1 -w 1 192.168.1."+ str(address) + " >> /dev/null" | |||
status = os.system(cmd) | |||
if status == 256: | |||
return False | |||
return True | |||
r51 | |||
r46 | def __writeReport(self, enaModules): | ||
status_array = ["Status of modules\n"] | |||
status_array.append("----------------\n") | |||
for address in range(1,65): | |||
if address in enaModules: | |||
# status_array.append("192.168.1." + str(base + i + 1) + " [1 1]\n") | |||
status_array.append("192.168.1." + str(address) + " [1 1]\n") | |||
else: | |||
status_array.append("192.168.1." + str(address) + " [0 0]\n") | |||
f = open("module_status.txt","w") | |||
f.writelines(status_array) | |||
f.close() | |||
def checkAntenna(self): | |||
""" | |||
Direccion de los modulos de las antenas: | |||
Norte : 01-16 | |||
Este : 17-32 | |||
Oeste: : 33-48 | |||
Sur : 49-64 | |||
""" | |||
enaModules = [] | |||
for address in range(1,65): | |||
if self.checkModule(address): | |||
enaModules.append(address) | |||
self.__writeReport(enaModules) | |||
return enaModules | |||
def sendFile2Modules(self): | |||
#Needed for the loop | |||
rx_frame_list = self.datarx.split('\n',2) | |||
r55 | self.experiment_name = rx_frame_list[0] | ||
r46 | experiment_number = rx_frame_list[1] | ||
str_control_modules = rx_frame_list[2] | |||
lst_control_modules = str_control_modules.split("------\n") | |||
enaModules = self.checkAntenna() | |||
for address in range(1,65): | |||
if address not in enaModules: | |||
continue | |||
r55 | self.__writeModuleFile(self.experiment_name, lst_control_modules[address-1]) | ||
r46 | |||
r55 | cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c put " + self.experiment_name | ||
r46 | print cmd | ||
os.system(cmd) | |||
self.__loadFile() | |||
r54 | |||
def __writeModuleFile(self, filename, str): | |||
fobj = open(filename,"w") | |||
fobj.write(filename + "\n") | |||
fobj.write("------\n") | |||
fobj.write(str) | |||
fobj.write("------\n") | |||
fobj.close() | |||
def __readModuleFile(self, filename): | |||
fobj1 = open(filename,"r") | |||
file_list_1 = fobj1.readlines() | |||
fobj1.close() | |||
content_str = ''.join(file_list_1[2:-1]) | |||
r46 | |||
r54 | return content_str | ||
def __loadFile(self): | |||
#Working with the UDP socket | |||
self.commClientObj.sendData("none", "CARGA:" + self.experiment_name + ":") | |||
self.commClientObj.sendData("none", "CAMBIA:0:") | |||
|
r19 | def changeBeam(self): | |
r27 | #rpta = self.commClientObj.sendTxRxCommand(cmd='CAMBIA', data="0") | ||
r57 | self.commClientObj.sendData("none", "CAMBIA:" + self.datarx + ":") | ||
r54 | |||
def getStatus(self,mode): | |||
if mode == 1: | |||
self.__getStsMode1() | |||
elif mode == 2: | |||
self.__getStsMode2() | |||
else: | |||
self.__getStsMode3() | |||
|
r19 | ||
r46 | def __getStsMode1(self): | ||
r27 | #rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") | ||
r54 | self.commClientObj.sendData("CHEQUEO:" + self.datarx + ":") | ||
r43 | seconds = int (self.datarx) | ||
# Give 5 seconds to the control modules | |||
time.sleep(seconds) | |||
# Checking the module connection | |||
module_list = self.connection_status(10) | |||
#Generating the complete report | |||
module = 1 | |||
number_of_modules = 16 | |||
filename1 = "Verificacion" | |||
filename2 = "report.txt" | |||
fobj2 = open(filename2,"w") | |||
fobj2.write("Verification_file\n") | |||
fobj2.write("-----------------\n") | |||
fobj2.close() | |||
while module <= number_of_modules: | |||
if module_list[module -1] == "1": | |||
#Preparing and doing the tftp command | |||
cmd = "tftp -m binary 192.168.1."+ str(base + module) +" 69 -c get " + filename1 | |||
print cmd | |||
os.system(cmd) | |||
# Getting data from the control module file | |||
fobj1 = open(filename1,"r") | |||
file_list_1 = fobj1.readlines() | |||
fobj1.close() | |||
content = file_list_1[2:-1] | |||
# | |||
fobj2 = open(filename2,"a") | |||
if base == 10: | |||
fobj2.write("S" + str(module) + "\n") | |||
else: | |||
fobj2.write("N" + str(module) + "\n") | |||
fobj2.writelines(content) | |||
fobj2.write("------\n") | |||
fobj2.close() | |||
module = module + 1 | |||
r46 | |||
def __getStsMode2(self): | |||
r43 | |||
r46 | #rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") | ||
r54 | self.commClientObj.sendData("CHEQUEO:" + self.datarx + ":") | ||
r46 | seconds = int (self.datarx) | ||
# Give 5 seconds to the control modules | |||
time.sleep(seconds) | |||
# Checking the module connection | |||
r51 | enaModules = self.checkAntenna() | ||
r46 | #Generating the complete report | ||
filename1 = "Verificacion" | |||
line1 = "Verification_file\n" | |||
line2 = "-----------------\n" | |||
report_list = [line1, line2] | |||
r51 | |||
for address in range(1,65): | |||
if address not in enaModules: | |||
continue | |||
#Preparing and doing the tftp command | |||
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename1 | |||
print cmd | |||
os.system(cmd) | |||
#Sub_header | |||
report_list.append("ABS_" + str(address) + "\n") | |||
# Content | |||
fobj1 = open(filename1,"r") | |||
file_list_1 = fobj1.readlines() | |||
fobj1.close() | |||
content = ''.join(file_list_1[2:-1]) | |||
report_list.append(content) | |||
#Ending | |||
report_list.append("------\n") | |||
r46 | #print "\nFinalizado" | ||
r54 | self.tx_buffer = ''.join(report_list) | ||
def __AddingHeader(self,content_list, title): | |||
line1 = title + "\n" | |||
line2 = "-----------------\n" | |||
header_list = [line1, line2] | |||
verification_list = header_list + content_list | |||
# Arming the frame | |||
self.tx_buffer = ''.join(verification_list) | |||
def __getModuleFile(self, filename): | |||
enaModules = self.checkAntenna() | |||
content_list = [] | |||
for address in range(1,65): | |||
if address not in enaModules: | |||
continue | |||
#Preparing and doing the tftp command | |||
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename | |||
print cmd | |||
os.system(cmd) | |||
#Sub_header | |||
content_list.append("ABS_" + str(address) + "\n") | |||
# From module file to list | |||
content_str = self.__readModuleFile(filename) | |||
content_list.append(content_str) | |||
content_list.append("------\n") | |||
self.__AddingHeader(content_list, title = "Verification_file") | |||
r46 | def __getStsMode3(self): | ||
r43 | |||
r57 | self.commClientObj.sendData("none", "CHEQUEO:" + self.datarx + ":") | ||
r46 | seconds = int (self.datarx) | ||
# Give 5 seconds to the control modules | |||
time.sleep(seconds) | |||
r54 | self.__getModuleFile(filename = "Verificacion") | ||
r46 | |||
r25 | |||
if __name__ == '__main__': | |||
absObj = ABSServer() | |||
r42 | while 1: | ||
r51 | absObj.waitRequest() |