server2.py
368 lines
| 11.6 KiB
| text/x-python
|
PythonLexer
r62 | import os | ||
r92 | import library2 | ||
r62 | import time | ||
class ABSServer: | |||
r92 | def __init__(self,ipSource="localhost", ipDestino="192.168.1.117", portDestino=7000, ipDestino2="192.168.1.11", portDestino2=5500): | ||
r62 | |||
self.ipSource = ipSource | |||
self.ipDestino = ipDestino | |||
self.portDestino = portDestino | |||
self.ipDestino2 = ipDestino2 | |||
self.portDestino2 = portDestino2 | |||
self.tx_buffer = "default" | |||
r92 | self.rx_buffer = "default" | ||
r62 | |||
self.createObjects() | |||
def createObjects(self): | |||
asServer = True | |||
r92 | self.commServerObj = library2.TCPComm("Central_Control", self.ipDestino, self.portDestino, asServer) | ||
self.commClientObj = library2.TCPComm("Central_Control", self.ipDestino2, self.portDestino2) | |||
r62 | |||
def waitRequest(self): | |||
r92 | # Using rx buffer | ||
ipSource, ipDestino, cmd, self.rx_buffer = self.commServerObj.waitServer() | |||
r62 | |||
if cmd == "SNDF": | |||
r92 | datarpta = self.sendFile2Modules(mode=2, cmd = cmd) | ||
r62 | |||
if cmd == "CHGB": | |||
r92 | datarpta = self.changeBeam(cmd = cmd) | ||
r62 | |||
if cmd == "ANST": | |||
r92 | self.getStatus(mode=4, cmd = cmd) | ||
# Using tx buffer | |||
r62 | datarpta = self.tx_buffer | ||
r92 | self.commServerObj.sendData2(cmd=cmd, data=datarpta, ipDestino = ipSource) | ||
r62 | |||
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 | |||
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(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 | |||
r92 | def sendFile2Modules(self, mode, cmd): | ||
if mode == 1: | |||
self.__sendFile2Modules1() | |||
else: | |||
self.__sendFile2Modules2(cmd) | |||
def __sendFile2Modules1(self): | |||
r62 | |||
#Needed for the loop | |||
r92 | rx_frame_list = self.rx_buffer.split('\n',2) | ||
r62 | |||
self.experiment_name = rx_frame_list[0] | |||
experiment_number = rx_frame_list[1] | |||
str_control_modules = rx_frame_list[2] | |||
lst_control_modules = str_control_modules.split("------\n") | |||
r92 | # enaModules = self.checkAntenna() | ||
enaModules = [11,12,13,14] | |||
r62 | |||
for address in range(1,65): | |||
if address not in enaModules: | |||
continue | |||
self.__writeModuleFile(self.experiment_name, lst_control_modules[address-1]) | |||
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c put " + self.experiment_name | |||
print cmd | |||
os.system(cmd) | |||
self.__loadFile() | |||
r92 | def __sendFile2Modules2(self,cmd): | ||
#Needed for the loop | |||
rx_frame_list = self.rx_buffer.split('\n',2) | |||
correct = 0 | |||
failure = 0 | |||
header = rx_frame_list[0] + "\n" | |||
str_control_modules = rx_frame_list[2] | |||
lst_control_modules = str_control_modules.split("------\n") | |||
# enaModules = self.checkAntenna() | |||
enaModules = [11,12,13,14] | |||
for id in range(1,65): | |||
if id not in enaModules: | |||
continue | |||
#tcp client needed | |||
self.commClientObj.open_socket() | |||
ip = "192.168.1." + str(id) | |||
self.commClientObj.sendData2(cmd, header + lst_control_modules[id-1], ip) | |||
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient() | |||
self.commClientObj.close_socket() | |||
if tmp == "OK": | |||
correct = correct + 1 | |||
else: | |||
failure = failure + 1 | |||
if correct == len(enaModules): | |||
rpta = "OK" | |||
else: | |||
rpta = "Failure" | |||
return rpta | |||
r62 | 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]) | |||
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:") | |||
r92 | def changeBeam(self, cmd): | ||
r62 | |||
r92 | correct = 0 | ||
failure = 0 | |||
# enaModules = self.checkAntenna() | |||
enaModules = [11,12,13,14] | |||
r62 | |||
r92 | for id in range(1,65): | ||
if id not in enaModules: | |||
continue | |||
self.commClientObj.open_socket() | |||
ip = "192.168.1." + str(id) | |||
self.commClientObj.sendData2(cmd, self.rx_buffer, ip) | |||
# ipSource, ipDestino, cmd, tmp = self.commClientObj.waitData() | |||
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient() | |||
self.commClientObj.close_socket() | |||
if tmp == "OK": | |||
correct = correct + 1 | |||
else: | |||
failure = failure + 1 | |||
if correct == len(enaModules): | |||
rpta = "OK" | |||
else: | |||
rpta = "Failure" | |||
return rpta | |||
def getStatus(self, mode, cmd): | |||
r62 | if mode == 1: | ||
self.__getStsMode1() | |||
elif mode == 2: | |||
self.__getStsMode2() | |||
r92 | elif mode == 3: | ||
self.__getStsMode3() | |||
r62 | else: | ||
r92 | self.__getStsMode4(cmd) | ||
r62 | |||
def __getStsMode1(self): | |||
#rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") | |||
r92 | self.commClientObj.sendData("CHEQUEO:" + self.rx_buffer + ":") | ||
seconds = int (self.rx_buffer) | |||
r62 | # 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 | |||
def __getStsMode2(self): | |||
#rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0") | |||
r92 | self.commClientObj.sendData("CHEQUEO:" + self.rx_buffer + ":") | ||
seconds = int (self.rx_buffer) | |||
r62 | # Give 5 seconds to the control modules | ||
time.sleep(seconds) | |||
# Checking the module connection | |||
enaModules = self.checkAntenna() | |||
#Generating the complete report | |||
filename1 = "Verificacion" | |||
line1 = "Verification_file\n" | |||
line2 = "-----------------\n" | |||
report_list = [line1, line2] | |||
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") | |||
#print "\nFinalizado" | |||
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") | |||
def __getStsMode3(self): | |||
r92 | self.commClientObj.sendData("none", "CHEQUEO:" + self.rx_buffer + ":") | ||
seconds = int (self.rx_buffer) | |||
r62 | # Give 5 seconds to the control modules | ||
time.sleep(seconds) | |||
self.__getModuleFile(filename = "Verificacion") | |||
r92 | |||
def __getStsMode4(self, cmd): | |||
r62 | |||
r92 | content_str = "" | ||
# enaModules = self.checkAntenna() | |||
enaModules = [11,12,13,14] | |||
for id in range(1,65): | |||
if id not in enaModules: | |||
continue | |||
self.commClientObj.open_socket() | |||
ip = "192.168.1." + str(id) | |||
self.commClientObj.sendData2(cmd, self.rx_buffer, ip) | |||
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient() | |||
self.commClientObj.close_socket() | |||
content_str = content_str + tmp | |||
# self.__AddingHeader(content_list, title = "Verification_file") | |||
#Using tx buffer | |||
self.tx_buffer = content_str | |||
r62 | if __name__ == '__main__': | ||
absObj = ABSServer() | |||
while 1: | |||
absObj.waitRequest() |