Skip to content

Commit 600c8c4

Browse files
committed
Merged hotfix/nested-classes into master
2 parents edc6b57 + babe0f2 commit 600c8c4

File tree

1 file changed

+123
-122
lines changed

1 file changed

+123
-122
lines changed

Main.py

Lines changed: 123 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -735,8 +735,7 @@ def __init__(self, x, y, objtype, *args, name="Default", maxconnections=4, ip=No
735735
TheGrid.moveto(self.image, self.x, self.y)
736736
self.image.show()
737737

738-
self.macdir = object()
739-
mac.__init__(self.macdir) #Soluciona un bug raro en Ubuntu
738+
self.macdir = mac()
740739
print("MAC:", self.macdir, int(self.macdir), bin(self.macdir))
741740
if ip == None:
742741
print("No ip definida")
@@ -815,44 +814,6 @@ def resizetogrid(self, image, *args):
815814
def clickado(self, widget, event):
816815
lprint("Clickado en objeto " + str(self) + " @ " + str(self.x) + ", " + str(self.y))
817816

818-
class mac():
819-
def __init__(self, *macaddr, bits=48):
820-
print("macaddr:", *macaddr)
821-
if macaddr == None or True:
822-
tmp = self.genmac(bits=bits)
823-
824-
self.int = tmp[0]
825-
self.str = tmp[1]
826-
self.bin = ("{0:0"+str(bits)+"b}").format(self.int)
827-
828-
def genmac(*self, bits=48, mode=None):
829-
#Por defecto se usa mac 48, o lo que es lo mismo, la de toa la vida
830-
#Nota, falta un comprobador de que la mac no se repita
831-
realmac = int("11" + str("{0:0"+ str(bits-2) +"b}").format(random.getrandbits(bits-2)),2)
832-
readmac = str(hex(realmac)).upper().replace("0X", "")
833-
readmac = ":".join([readmac[i * 2:i * 2 + 2] for i,bl in enumerate(readmac[::2])])
834-
if mode == 0:
835-
return realmac
836-
if mode == 1:
837-
return readmac
838-
else:
839-
return [realmac, readmac]
840-
841-
def __str__(self):
842-
readmac = str(hex(self.int)).upper().replace("0X", "")
843-
return ":".join([readmac[i * 2:i * 2 + 2] for i,bl in enumerate(readmac[::2])])
844-
845-
def __bytes__(self):
846-
return Object.__bytes__(self)
847-
848-
def __int__(self):
849-
return self.int
850-
def __index__(self):
851-
return self.int
852-
def list(self):
853-
return self.str.split(":")
854-
855-
856817
#Esta fucnión se encarga de comprobar a que ordenador(es) está conectado
857818
#en total, pasando por routers, hubs y switches.
858819

@@ -1059,6 +1020,43 @@ def packet_received(self, pck, *args, port=None):
10591020

10601021
print("<<Fin de los atributos")
10611022

1023+
class mac():
1024+
def __init__(self, *macaddr, bits=48):
1025+
print("macaddr:", *macaddr)
1026+
if macaddr == None or True:
1027+
tmp = self.genmac(bits=bits)
1028+
1029+
self.int = tmp[0]
1030+
self.str = tmp[1]
1031+
self.bin = ("{0:0"+str(bits)+"b}").format(self.int)
1032+
1033+
def genmac(*self, bits=48, mode=None):
1034+
#Por defecto se usa mac 48, o lo que es lo mismo, la de toa la vida
1035+
#Nota, falta un comprobador de que la mac no se repita
1036+
realmac = int("11" + str("{0:0"+ str(bits-2) +"b}").format(random.getrandbits(bits-2)),2)
1037+
readmac = str(hex(realmac)).upper().replace("0X", "")
1038+
readmac = ":".join([readmac[i * 2:i * 2 + 2] for i,bl in enumerate(readmac[::2])])
1039+
if mode == 0:
1040+
return realmac
1041+
if mode == 1:
1042+
return readmac
1043+
else:
1044+
return [realmac, readmac]
1045+
1046+
def __str__(self):
1047+
readmac = str(hex(self.int)).upper().replace("0X", "")
1048+
return ":".join([readmac[i * 2:i * 2 + 2] for i,bl in enumerate(readmac[::2])])
1049+
1050+
def __bytes__(self):
1051+
return Object.__bytes__(self)
1052+
1053+
def __int__(self):
1054+
return self.int
1055+
def __index__(self):
1056+
return self.int
1057+
def list(self):
1058+
return self.str.split(":")
1059+
10621060
npack = 0
10631061

10641062
class Router(ObjetoBase):
@@ -1076,89 +1074,92 @@ def __del__(self, *args):
10761074
push_elemento("Eliminado objeto")
10771075
del self
10781076

1079-
class Switch(ObjetoBase):
1080-
cnt = 1
1081-
#El objeto puerto
1082-
class Port():
1083-
def __init__(self, switch):
1084-
self.id = switch.portid
1085-
self.dic = switch.pdic
1086-
self.all = switch.pall
1087-
switch.portid += 1
1088-
self.switch = switch
1089-
self.connection = None
1090-
self.all[self.id] = self
1091-
self.dic[self.id] = self.connection
1092-
def connect(self, connection):
1093-
self.connection = connection
1094-
self.dic[self.id] = self.connection
1095-
def disconnect(self):
1096-
self.connection = None
1097-
self.dic[self.id] = self.connection
1098-
def is_available(self):
1099-
if self.connection == None:
1100-
return True
1101-
return False
1102-
1103-
class w_switch_table(Gtk.ApplicationWindow):
1104-
def __init__(self, switch):
1105-
self.link = switch
1106-
builder = switch.builder
1107-
builder.get_object("window_switch-table_button").connect("clicked", self.hide)
1108-
builder.get_object("window_switch-table").connect("delete-event", self.hide)
1109-
self.store = Gtk.ListStore(str,int,int,int)
1110-
1111-
self.view = builder.get_object("window_switch-table-TreeView")
1112-
self.view.set_model(self.store)
1113-
for i, column_title in enumerate(["MAC", "Puerto", "TTL (s)"]):
1114-
renderer = Gtk.CellRendererText()
1115-
column = Gtk.TreeViewColumn(column_title, renderer, text=i)
1116-
column.set_sort_column_id(i)
1117-
self.view.append_column(column)
1118-
self.ticking = False
1119-
builder.get_object("window_switch-table").set_keep_above(True)
1120-
1121-
def show(self, *a):
1077+
### ESTO ERA NESTED DE SWITHC ###
1078+
1079+
class Port():
1080+
def __init__(self, switch):
1081+
self.id = switch.portid
1082+
self.dic = switch.pdic
1083+
self.all = switch.pall
1084+
switch.portid += 1
1085+
self.switch = switch
1086+
self.connection = None
1087+
self.all[self.id] = self
1088+
self.dic[self.id] = self.connection
1089+
def connect(self, connection):
1090+
self.connection = connection
1091+
self.dic[self.id] = self.connection
1092+
def disconnect(self):
1093+
self.connection = None
1094+
self.dic[self.id] = self.connection
1095+
def is_available(self):
1096+
if self.connection == None:
1097+
return True
1098+
return False
1099+
1100+
class w_switch_table(Gtk.ApplicationWindow):
1101+
def __init__(self, switch):
1102+
self.link = switch
1103+
builder = switch.builder
1104+
builder.get_object("window_switch-table_button").connect("clicked", self.hide)
1105+
builder.get_object("window_switch-table").connect("delete-event", self.hide)
1106+
self.store = Gtk.ListStore(str,int,int,int)
1107+
1108+
self.view = builder.get_object("window_switch-table-TreeView")
1109+
self.view.set_model(self.store)
1110+
for i, column_title in enumerate(["MAC", "Puerto", "TTL (s)"]):
1111+
renderer = Gtk.CellRendererText()
1112+
column = Gtk.TreeViewColumn(column_title, renderer, text=i)
1113+
column.set_sort_column_id(i)
1114+
self.view.append_column(column)
1115+
self.ticking = False
1116+
builder.get_object("window_switch-table").set_keep_above(True)
1117+
1118+
def show(self, *a):
1119+
self.ticking = True
1120+
GObject.timeout_add(1001, self.tick)
1121+
for row in self.store:
1122+
row[2] = row[3] - time.time()
1123+
self.link.builder.get_object("window_switch-table").show_all()
1124+
1125+
def hide(self, window, *event):
1126+
self.link.builder.get_object("window_switch-table").hide()
1127+
self.ticking = False
1128+
return True
1129+
def append(self, lst):
1130+
lst.append(lst[2])
1131+
for row in self.store:
1132+
row[2] = row[3] - time.time()
1133+
print(lst)
1134+
row = self.store.append(lst)
1135+
print(self.view.get_property("visible"))
1136+
if self.view.get_property("visible") == True:
11221137
self.ticking = True
11231138
GObject.timeout_add(1001, self.tick)
1124-
for row in self.store:
1125-
row[2] = row[3] - time.time()
1126-
self.link.builder.get_object("window_switch-table").show_all()
11271139

1128-
def hide(self, window, *event):
1129-
self.link.builder.get_object("window_switch-table").hide()
1130-
self.ticking = False
1131-
return True
1132-
def append(self, lst):
1133-
lst.append(lst[2])
1134-
for row in self.store:
1135-
row[2] = row[3] - time.time()
1136-
print(lst)
1137-
row = self.store.append(lst)
1138-
print(self.view.get_property("visible"))
1139-
if self.view.get_property("visible") == True:
1140-
self.ticking = True
1141-
GObject.timeout_add(1001, self.tick)
1142-
1143-
def tick(self):
1144-
for row in self.store:
1145-
row[2] = row[3] - time.time()
1146-
if row[2] <= 0:
1147-
try:
1148-
self.store.remove(row.iter)
1149-
self.link.table.remove(row)
1150-
except:
1151-
pass
1152-
if len(self.store) == 0:
1153-
self.ticking = False
1154-
return self.ticking
1155-
def remove(self, lst):
1156-
for row in self.store:
1157-
if row == lst:
1140+
def tick(self):
1141+
for row in self.store:
1142+
row[2] = row[3] - time.time()
1143+
if row[2] <= 0:
1144+
try:
11581145
self.store.remove(row.iter)
1159-
self.link.table
1160-
break
1161-
pass
1146+
self.link.table.remove(row)
1147+
except:
1148+
pass
1149+
if len(self.store) == 0:
1150+
self.ticking = False
1151+
return self.ticking
1152+
def remove(self, lst):
1153+
for row in self.store:
1154+
if row == lst:
1155+
self.store.remove(row.iter)
1156+
self.link.table
1157+
break
1158+
pass
1159+
1160+
class Switch(ObjetoBase):
1161+
cnt = 1
1162+
#El objeto puerto
11621163

11631164
def __init__(self, x, y, *args, name="Default", maxconnections=5):
11641165
self.objectype = "Switch"
@@ -1174,13 +1175,13 @@ def __init__(self, x, y, *args, name="Default", maxconnections=5):
11741175
self.timeout = 20 #Segundos
11751176

11761177
for p in range(self.max_connections):
1177-
self.Port(self)
1178+
Port(self)
11781179
print(self.pall)
11791180

11801181
self.table = [
11811182
#[MAC, port, expiration]
11821183
]
1183-
self.wtable = self.w_switch_table(self)
1184+
self.wtable = w_switch_table(self)
11841185
child = Gtk.MenuItem.new_with_label("Routing Table")
11851186
self.builder.get_object("grid_rclick").append(child)
11861187
child.connect("activate", self.wtable.show)
@@ -1192,7 +1193,7 @@ def load(self):
11921193
ObjetoBase.load(self)
11931194
del self.wtable
11941195
self.table = []
1195-
self.wtable = self.w_switch_table(self)
1196+
self.wtable = w_switch_table(self)
11961197

11971198
del self.ch
11981199
child = Gtk.MenuItem.new_with_label("Routing Table")

0 commit comments

Comments
 (0)