""" *************************************************** * Peer * *************************************************** * reputation: float * * upload: float * * download: float * * name: string * * normalised_up=float * * properties=string * * coordinates=tuple * *************************************************** * Peer(float rep,float up,float down, string name)* * setRep(float rep) * * setUp(float up) * * setDown(float down) * * setNormUP(float norm_up) * * setLatency(float lat) * * setClient(string client) * * setName(string name) * * setProperties() * * setID(int ID) * * setCoordinates(tuple p) * * getRep(): float reputation * * getUp(): float Upload * * getDown():float Download * * getNormUP(): float normalised_up * * getLatency(): float latency * * getClient():string client * * getName(): string name * * getID(): int ID * * getCoordinates():tuple coordinates * * getProperties(): string properties * * visPeer() * *************************************************** *************************************************** * Swarm * *************************************************** * group: array * *************************************************** * Swarm() * * add(Peer peer) * * setPeerRep(int number, float rep) * * setPeerDown(int number, float down) * * setPeerUp(int number, float up) * * setPeerNormUP(int number, float norm_up) * * setPeerLatency(int number, float latency) * * setPeerClient(int number,string client) * * setPeerName(int number,string name) * * setProperties() * * setPeerID(int number, int ID) * * setPeerCoordinates(number,tuple p) * * getRep(int number): float reputation * * getPeerUp(int number): float Upload * * getPeerDown(int number):float Download * * getPeerNormUP(int number): float normalised_up * * getPeerLatency(int number):float latency * * getPeerClient(int number): string client * * getPeerName(int number): string name * * getPeerID(int number): int ID * * getPeerCoordinates(int number):tuple coordinates* * getPeerProperties(int number):string properties * * visSwarm() * *************************************************** """ from wxPython.glcanvas import wxGLCanvas from wxPython.wx import * from OpenGL.GLUT import * from OpenGL.GLU import * from OpenGL.GL import * import sys,math import wx import string import threading import time import operator from random import * name = 'Prototype PyOpenGL' class Peer: def __init__(self, rep, up, down,lat,MBshared,client,name): self.reputation = rep self.upload = up self.download = down self.latency = lat self.MBshared = MBshared self.client = client self.name = name self.normalised_up = 0 self.properties = '' self.coordinates = (0,0) self.ID = 0 def setRep(self, rep): self.reputation = rep def setUp(self, up): self.upload = up def setDown(self,down ): self.download = down def setNormUP(self,norm_up): self.normalised_up = norm_up def setLatency(self,lat): self.latency = lat def setMBshared(self,MBshared): self.MBshared = MBshared def setClient(self,client): self.client=client def setName(self,name): self.name=name def setProperties(self): self.properties=self.getName() + '\nReputation: ' + repr(self.getRep())+ '\nBandwidth in Upload: ' + repr(self.getUp()) + '\nBandwidth in Download: '+ repr(self.getDown()) + '\nLatency: '+ repr(self.getLatency()) + '\nMB shared: '+ repr(self.getMBshared()) + '\nClient: ' + self.getClient() def setCoordinates(self,p): self.coordinates=p def setID(self,ID): self.ID = ID def getRep(self): return self.reputation def getUp(self): return self.upload def getDown(self): return self.download def getNormUP(self): return self.normalised_up def getLatency(self): return self.latency def getMBshared(self): return self.MBshared def getClient(self): return self.client def getName(self): return self.name def getCoordinates(self): return self.coordinates def getID(self): return self.ID def getProperties(self): return self.properties #print the reputations and bandwidth of the peer def visPeer(self): print self.properties class Swarm: def __init__(self): self.group = [] def add(self, peer): self.group.append(peer) def setPeerRep(self, number,rep): self.group[number].setRep(rep) def setPeerUp(self, number,up): self.group[number].setUp(up) def setPeerDown(self, number,down): self.group[number].setDown(down) def setPeerNormUP(self, number,norm_up): self.group[number].setNormUP(norm_up) def setPeerLatency(self,number,lat): self.group[number].setLatency(lat) def setPeerMBshared(self,number,MBshared): self.group[number].setMBshared(MBshared) def setPeerClient(self, number,client): self.group[number].setClient(client) def setPeerName(self, number,name): self.group[number].setName(name) def setPeerCoordinates(self, number,p): self.group[number].setCoordinates(p) def setPeerID(self, number,ID): self.group[number].setID(ID) def setProperties(self): for i in range (len(self.group)): self.group[i].setProperties() def getPeerRep(self, number): return self.group[number].getRep() def getPeerUp(self, number): return self.group[number].getUp() def getPeerDown(self, number): return self.group[number].getDown() def getPeerNormUP(self, number): return self.group[number].getNormUP() def getPeerLatency(self, number): return self.group[number].getLatency() def getPeerMBshared(self,number): return self.group[number].getMBshared() def getPeerClient(self, number): return self.group[number].getClient() def getPeerName(self, number): return self.group[number].getName() def getPeerCoordinates(self, number): return self.group[number].getCoordinates() def getPeerID(self, number): return self.group[number].getID() def getPeerProperties(self, number): return self.group[number].getProperties() def visSwarm(self): for i in range (len(self.group)): self.group[i].visPeer() def generateSwarm(number): peers = Swarm() chars = string.letters + string.digits name_length=8 for i in range (number): x = Peer(uniform(1,3),randint(1,200),randint(1,600),uniform(5,250),uniform(5,1000),choice(['BitTorrent','Tribler']),''.join([choice(chars) for i in range(name_length)])) peers.add(x) return peers def SortSwarm(swarm): swarmBT = Swarm() swarmT = Swarm() swarmBandwidthBT = Swarm() swarmBandwidthT = Swarm() swarmLatencyBT = Swarm() swarmLatencyT = Swarm() swarmMBBT = Swarm() swarmMBT = Swarm() #sort the swarm according to its bandwidth in upload swarm.group.sort(key=operator.attrgetter('upload')) #sort the swarm according to the client used for i in range(len(swarm.group)): if swarm.getPeerClient(i)=='BitTorrent': swarmBT.add(swarm.group[i]) else: swarmT.add(swarm.group[i]) #copy the two groups of swarm in two new lists sorted by bandwidth, one for Tribler Peers and one for BitTorrent Peers for i in range(len(swarmBT.group)): swarmBandwidthBT.add(swarmBT.group[i]) for i in range(len(swarmT.group)): swarmBandwidthT.add(swarmT.group[i]) #sort the swarm according to the latency swarmBT.group.sort(key=operator.attrgetter('latency')) swarmT.group.sort(key=operator.attrgetter('latency')) #copy the two groups of swarm in two new lists sorted by latency, one for Tribler Peers and one for BitTorrent Peers for i in range(len(swarmBT.group)): swarmLatencyBT.add(swarmBT.group[i]) for i in range(len(swarmT.group)): swarmLatencyT.add(swarmT.group[i]) #sort the swarm according to MB shared swarmBT.group.sort(key=operator.attrgetter('MBshared')) swarmT.group.sort(key=operator.attrgetter('MBshared')) #copy the two groups of swarm in two new lists sorted by MB shared, one for Tribler Peers and one for BitTorrent Peers for i in range(len(swarmBT.group)): swarmMBBT.add(swarmBT.group[i]) for i in range(len(swarmT.group)): swarmMBT.add(swarmT.group[i]) return swarm,swarmBandwidthBT, swarmBandwidthT, swarmLatencyBT, swarmLatencyT, swarmMBBT, swarmMBT #Normalise the latency for screen visualization def normaliseLatency(swarm): maximum = 20 for i in range(len(swarm.group)): if swarm.getPeerLatency(i)==0: swarm.setPeerNormUP(i,maximum-12) elif swarm.getPeerLatency(i)>0 and swarm.getPeerLatency(i)<=50: swarm.setPeerNormUP(i,maximum-10) elif swarm.getPeerLatency(i)>50 and swarm.getPeerLatency(i)<=80: swarm.setPeerNormUP(i,maximum-8) elif swarm.getPeerLatency(i)>80 and swarm.getPeerLatency(i)<=120: swarm.setPeerNormUP(i,maximum-7) elif swarm.getPeerLatency(i)>120 and swarm.getPeerLatency(i)<=150: swarm.setPeerNormUP(i,maximum-6) elif swarm.getPeerLatency(i)>150 and swarm.getPeerLatency(i)<=180: swarm.setPeerNormUP(i,maximum-5) else: swarm.setPeerNormUP(i,maximum-2) return #Normalise the bandwidth in upload for screen visualization def normaliseUploadBandwidth(swarm): maximum = 20 for i in range(len(swarm.group)): if swarm.getPeerUp(i)==0: swarm.setPeerNormUP(i,maximum) elif swarm.getPeerUp(i)>0 and swarm.getPeerUp(i)<=50: swarm.setPeerNormUP(i,maximum-2) elif swarm.getPeerUp(i)>50 and swarm.getPeerUp(i)<=80: swarm.setPeerNormUP(i,maximum-5) elif swarm.getPeerUp(i)>80 and swarm.getPeerUp(i)<=120: swarm.setPeerNormUP(i,maximum-6) elif swarm.getPeerUp(i)>120 and swarm.getPeerUp(i)<=150: swarm.setPeerNormUP(i,maximum-7) elif swarm.getPeerUp(i)>150 and swarm.getPeerUp(i)<=180: swarm.setPeerNormUP(i,maximum-8) else: swarm.setPeerNormUP(i,maximum-10) return def normaliseSize(UP): if UP<1: size = 0.05 elif UP>=1 and UP<=10: size = 0.2 elif UP>10 and UP<=30: size = 0.3 elif UP>10 and UP<=30: size = 0.35 else: size = 0.4 return size class myGLCanvas(wxGLCanvas): def __init__(self, parent): wxGLCanvas.__init__(self, parent,-1,pos=(0, 0)) EVT_PAINT(self, self.OnPaint) #Bind Mouse Events self.Bind(wx.EVT_LEFT_DOWN, self.PickPeers) self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown) #Bind Checkboxes self.cb1 = wx.CheckBox(self, wx.ID_ANY, 'Highest Bandwidth G2G', pos=(10, 10)) self.cb2 = wx.CheckBox(self, wx.ID_ANY, 'Highest Bandwidth T4T', pos=(150, 10)) self.cb3 = wx.CheckBox(self, wx.ID_ANY, 'Lowest latency G2G',pos=(10, 30)) self.cb4 = wx.CheckBox(self, wx.ID_ANY, 'Lowest latency T4T', pos=(150, 30)) self.cb5 = wx.CheckBox(self, wx.ID_ANY, 'Most uploaded MB G2G', pos=(10, 50)) self.cb6 = wx.CheckBox(self, wx.ID_ANY, 'Most uploaded MB T4T',pos=(150, 50)) self.cb7 = wx.CheckBox(self, wx.ID_ANY, 'Random Peers G2G', pos=(10, 70)) self.cb8 = wx.CheckBox(self, wx.ID_ANY, 'Random Peers T4T',pos=(150, 70)) self.cb1.SetValue(True) self.cb2.SetValue(True) self.cb3.SetValue(True) self.cb4.SetValue(True) self.cb5.SetValue(True) self.cb6.SetValue(True) self.cb7.SetValue(True) self.cb8.SetValue(True) self.cb1.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb2.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb3.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb4.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb5.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb6.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb7.Bind(wx.EVT_CHECKBOX, self.onAction) self.cb8.Bind(wx.EVT_CHECKBOX, self.onAction) modes = ['LATENCY VS UPLOAD BANDWIDTH', 'LATENCY VS REPUTATION', 'UPLOAD BANDWIDTH VS REPUTATION'] self.ch = wx.Choice(self, -1, (10, 90), choices = modes) self.Bind(wx.EVT_CHOICE, self.EvtChoice, self.ch) self.peers_visualized=80 choose = ['Default (80 Peers)', '160 peers', '320 peers'] self.ch1 = wx.Choice(self, -1, (10, 120), choices = choose) self.Bind(wx.EVT_CHOICE, self.EvtChoice1, self.ch1) self.mode = 1 self.init = 0 return def onAction(self, event): cb = event.GetEventObject() #IF DEPLOYED PUT SOMETHING TO WRITE TO LOG HERE def EvtChoice(self, event): if event.GetString() == 'LATENCY VS UPLOAD BANDWIDTH': self.mode = 1 elif event.GetString() == 'LATENCY VS REPUTATION': self.mode = 2 else: self.mode = 3 def EvtChoice1(self, event): if event.GetString() == 'Default (80 Peers)': self.peers_visualized=80 elif event.GetString() == '160 peers': self.peers_visualized=160 else: self.peers_visualized=320 def OnPaint(self,event): dc = wxPaintDC(self) self.SetCurrent() if not self.init: self.InitGL() self.init = 1 self.drawPeers(GL_RENDER,1) t = threading.Timer(20.0,self.Refresh) t.start() return def drawPeers(self,GLmode,flag): test = generateSwarm(self.peers_visualized) self.swarm,swarmBandwidthBT, swarmBandwidthT, swarmLatencyBT, swarmLatencyT, swarmMBBT, swarmMBT = SortSwarm(test) if (self.mode==1): #normalise latency to set the values of NormUP normaliseLatency(swarmBandwidthBT) swarmBandwidthBT.setProperties() normaliseLatency(swarmBandwidthT) swarmBandwidthT.setProperties() normaliseLatency(swarmLatencyBT) swarmLatencyBT.setProperties() normaliseLatency(swarmLatencyT) swarmLatencyT.setProperties() normaliseLatency(swarmMBBT) swarmMBBT.setProperties(), normaliseLatency(swarmMBT) swarmMBT.setProperties() elif (self.mode==2): #normalise latency to set the values of NormUP normaliseLatency(swarmBandwidthBT) swarmBandwidthBT.setProperties() normaliseLatency(swarmBandwidthT) swarmBandwidthT.setProperties() normaliseLatency(swarmLatencyBT) swarmLatencyBT.setProperties() normaliseLatency(swarmLatencyT) swarmLatencyT.setProperties() normaliseLatency(swarmMBBT) swarmMBBT.setProperties(), normaliseLatency(swarmMBT) swarmMBT.setProperties() else: #normalise bandwidth in upload to set the values of NormUP normaliseUploadBandwidth(swarmBandwidthBT) swarmBandwidthBT.setProperties() normaliseUploadBandwidth(swarmBandwidthT) swarmBandwidthT.setProperties() normaliseUploadBandwidth(swarmLatencyBT) swarmLatencyBT.setProperties() normaliseUploadBandwidth(swarmLatencyT) swarmLatencyT.setProperties() normaliseUploadBandwidth(swarmMBBT) swarmMBBT.setProperties(), normaliseUploadBandwidth(swarmMBT) swarmMBT.setProperties() if (GLmode == GL_RENDER and flag==1): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); color = [1.0,0.,0.,1.] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) glutSolidSphere( 1, 100, 100 ); glPopMatrix() t=0 count = 0 self.swarm.group=[] if self.cb1.GetValue()==1: color = [0.0, 0.5, 0.5, 1.0] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in reversed(xrange (len(swarmBandwidthBT.group)-self.peers_visualized/8,len(swarmBandwidthBT.group))): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmBandwidthBT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(i),swarmBandwidthBT.getPeerUp(i),swarmBandwidthBT.getPeerDown(i),swarmBandwidthBT.getPeerLatency(i),swarmBandwidthBT.getPeerMBshared(i),swarmBandwidthBT.getPeerClient(i),swarmBandwidthBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmBandwidthBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(i),swarmBandwidthBT.getPeerUp(i),swarmBandwidthBT.getPeerDown(i),swarmBandwidthBT.getPeerLatency(i),swarmBandwidthBT.getPeerMBshared(i),swarmBandwidthBT.getPeerClient(i),swarmBandwidthBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmBandwidthBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(i),swarmBandwidthBT.getPeerUp(i),swarmBandwidthBT.getPeerDown(i),swarmBandwidthBT.getPeerLatency(i),swarmBandwidthBT.getPeerMBshared(i),swarmBandwidthBT.getPeerClient(i),swarmBandwidthBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb2.GetValue()==1: color = [1.,0.4,0.0,1.] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in reversed(xrange (len(swarmBandwidthT.group)-self.peers_visualized/8,len(swarmBandwidthT.group))): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmBandwidthT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(i),swarmBandwidthT.getPeerUp(i),swarmBandwidthT.getPeerDown(i),swarmBandwidthT.getPeerLatency(i),swarmBandwidthT.getPeerMBshared(i),swarmBandwidthT.getPeerClient(i),swarmBandwidthT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmBandwidthT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(i),swarmBandwidthT.getPeerUp(i),swarmBandwidthT.getPeerDown(i),swarmBandwidthT.getPeerLatency(i),swarmBandwidthT.getPeerMBshared(i),swarmBandwidthT.getPeerClient(i),swarmBandwidthT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmBandwidthT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(i))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(i),swarmBandwidthT.getPeerUp(i),swarmBandwidthT.getPeerDown(i),swarmBandwidthT.getPeerLatency(i),swarmBandwidthT.getPeerMBshared(i),swarmBandwidthT.getPeerClient(i),swarmBandwidthT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb3.GetValue()==1: color = [0.0, 0.5, 0.5, 1.0] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in range (0,self.peers_visualized/8): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmLatencyBT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmLatencyBT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyBT.getPeerRep(i),swarmLatencyBT.getPeerUp(i),swarmLatencyBT.getPeerDown(i),swarmLatencyBT.getPeerLatency(i),swarmLatencyBT.getPeerMBshared(i),swarmLatencyBT.getPeerClient(i),swarmLatencyBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmLatencyBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmLatencyBT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyBT.getPeerRep(i),swarmLatencyBT.getPeerUp(i),swarmLatencyBT.getPeerDown(i),swarmLatencyBT.getPeerLatency(i),swarmLatencyBT.getPeerMBshared(i),swarmLatencyBT.getPeerClient(i),swarmLatencyBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmLatencyBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmLatencyBT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyBT.getPeerRep(i),swarmLatencyBT.getPeerUp(i),swarmLatencyBT.getPeerDown(i),swarmLatencyBT.getPeerLatency(i),swarmLatencyBT.getPeerMBshared(i),swarmLatencyBT.getPeerClient(i),swarmLatencyBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb4.GetValue()==1: color = [1.,0.4,0.0,1.] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in range (0,self.peers_visualized/8): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmLatencyT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmLatencyT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyT.getPeerRep(i),swarmLatencyT.getPeerUp(i),swarmLatencyT.getPeerDown(i),swarmLatencyT.getPeerLatency(i),swarmLatencyT.getPeerMBshared(i),swarmLatencyT.getPeerClient(i),swarmLatencyT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmLatencyT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmLatencyT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyT.getPeerRep(i),swarmLatencyT.getPeerUp(i),swarmLatencyT.getPeerDown(i),swarmLatencyT.getPeerLatency(i),swarmLatencyT.getPeerMBshared(i),swarmLatencyT.getPeerClient(i),swarmLatencyT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmLatencyT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmLatencyT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmLatencyT.getPeerNormUP(i))*math.cos(t) m = (swarmLatencyT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmLatencyT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmLatencyT.getPeerRep(i),swarmLatencyT.getPeerUp(i),swarmLatencyT.getPeerDown(i),swarmLatencyT.getPeerLatency(i),swarmLatencyT.getPeerMBshared(i),swarmLatencyT.getPeerClient(i),swarmLatencyT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb5.GetValue()==1: color = [0.0, 0.5, 0.5, 1.0] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in reversed(xrange (len(swarmMBBT.group)-self.peers_visualized/8,len(swarmMBBT.group))): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmMBBT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmMBBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBBT.getPeerRep(i),swarmMBBT.getPeerUp(i),swarmMBBT.getPeerDown(i),swarmMBBT.getPeerLatency(i),swarmMBBT.getPeerMBshared(i),swarmMBBT.getPeerClient(i),swarmMBBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmMBBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmMBBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBBT.getPeerRep(i),swarmMBBT.getPeerUp(i),swarmMBBT.getPeerDown(i),swarmMBBT.getPeerLatency(i),swarmMBBT.getPeerMBshared(i),swarmMBBT.getPeerClient(i),swarmMBBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmMBBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmMBBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBBT.getPeerRep(i),swarmMBBT.getPeerUp(i),swarmMBBT.getPeerDown(i),swarmMBBT.getPeerLatency(i),swarmMBBT.getPeerMBshared(i),swarmMBBT.getPeerClient(i),swarmMBBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb6.GetValue()==1: color = [1.,0.4,0.0,1.] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in reversed(xrange (len(swarmMBT.group)-self.peers_visualized/8,len(swarmMBT.group))): if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmMBT.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 n = (swarmMBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBT.getPeerRep(i),swarmMBT.getPeerUp(i),swarmMBT.getPeerDown(i),swarmMBT.getPeerLatency(i),swarmMBT.getPeerMBshared(i),swarmMBT.getPeerClient(i),swarmMBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmMBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmMBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBT.getPeerRep(i),swarmMBT.getPeerUp(i),swarmMBT.getPeerDown(i),swarmMBT.getPeerLatency(i),swarmMBT.getPeerMBshared(i),swarmMBT.getPeerClient(i),swarmMBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmMBT.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(swarmMBT.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 n = (swarmMBT.getPeerNormUP(i))*math.cos(t) m = (swarmMBT.getPeerNormUP(i))*math.sin(t) p = (n,m) swarmMBT.setPeerCoordinates(i,p) glPopMatrix(); glFlush() temp = Peer(swarmMBT.getPeerRep(i),swarmMBT.getPeerUp(i),swarmMBT.getPeerDown(i),swarmMBT.getPeerLatency(i),swarmMBT.getPeerMBshared(i),swarmMBT.getPeerClient(i),swarmMBT.getPeerName(i)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb7.GetValue()==1: color = [0.0, 0.5, 0.5, 1.0] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in range (0,self.peers_visualized/8): r=randint(0,len(swarmBandwidthBT.group)-1) if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmBandwidthBT.getPeerUp(r)), 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(r),swarmBandwidthBT.getPeerUp(r),swarmBandwidthBT.getPeerDown(r),swarmBandwidthBT.getPeerLatency(r),swarmBandwidthBT.getPeerMBshared(r),swarmBandwidthBT.getPeerClient(r),swarmBandwidthBT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(swarmBandwidthBT.getPeerRep(r)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(r),swarmBandwidthBT.getPeerUp(r),swarmBandwidthBT.getPeerDown(r),swarmBandwidthBT.getPeerLatency(r),swarmBandwidthBT.getPeerMBshared(r),swarmBandwidthBT.getPeerClient(r),swarmBandwidthBT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthBT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(swarmBandwidthBT.getPeerRep(r)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthBT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthBT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthBT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthBT.getPeerRep(r),swarmBandwidthBT.getPeerUp(r),swarmBandwidthBT.getPeerDown(r),swarmBandwidthBT.getPeerLatency(r),swarmBandwidthBT.getPeerMBshared(r),swarmBandwidthBT.getPeerClient(r),swarmBandwidthBT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.cb8.GetValue()==1: color = [1.,0.4,0.0,1.] glMaterialfv(GL_FRONT,GL_DIFFUSE,color) for i in range (0,self.peers_visualized/8): r=randint(0,len(swarmBandwidthT.group)-1) if self.mode==1: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(normaliseSize(swarmBandwidthT.getPeerUp(r)), 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(r),swarmBandwidthT.getPeerUp(r),swarmBandwidthT.getPeerDown(r),swarmBandwidthT.getPeerLatency(r),swarmBandwidthT.getPeerMBshared(r),swarmBandwidthT.getPeerClient(r),swarmBandwidthT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 elif self.mode==2: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(swarmBandwidthT.getPeerRep(r)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(r),swarmBandwidthT.getPeerUp(r),swarmBandwidthT.getPeerDown(r),swarmBandwidthT.getPeerLatency(r),swarmBandwidthT.getPeerMBshared(r),swarmBandwidthT.getPeerClient(r),swarmBandwidthT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 else: if (GLmode == GL_SELECT): glLoadName(count) glPushMatrix(); glRotatef(4.5*count, 0.0, 0.0, 1.0 ); glTranslatef(swarmBandwidthT.getPeerNormUP(r), 0.0, 0.0); glutSolidSphere(swarmBandwidthT.getPeerRep(r)/6, 100, 100 ); t=t+math.pi/40 n = (swarmBandwidthT.getPeerNormUP(r))*math.cos(t) m = (swarmBandwidthT.getPeerNormUP(r))*math.sin(t) p = (n,m) swarmBandwidthT.setPeerCoordinates(r,p) glPopMatrix(); glFlush() temp = Peer(swarmBandwidthT.getPeerRep(r),swarmBandwidthT.getPeerUp(r),swarmBandwidthT.getPeerDown(r),swarmBandwidthT.getPeerLatency(r),swarmBandwidthT.getPeerMBshared(r),swarmBandwidthT.getPeerClient(r),swarmBandwidthT.getPeerName(r)) temp.setCoordinates(p) self.swarm.add(temp) count+=1 if self.mode==1: normaliseLatency(self.swarm) self.swarm.setProperties() elif self.mode==2: normaliseLatency(self.swarm) self.swarm.setProperties() else: normaliseUploadBandwidth(self.swarm) self.swarm.setProperties() if (GLmode == GL_RENDER and flag==1): self.SwapBuffers() return def drawOnSelect(self): t=0 #ADD THE OTHER MODES if self.mode==1: for i in range (len(self.swarm.group)): glLoadName(i) glPushMatrix(); glRotatef(4.5*i, 0.0, 0.0, 1.0 ); glTranslatef(self.swarm.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(normaliseSize(self.swarm.getPeerUp(i)), 100, 100 ); t=t+math.pi/40 glPopMatrix(); glFlush() elif self.mode==2: for i in range (len(self.swarm.group)): glLoadName(i) glPushMatrix(); glRotatef(4.5*i, 0.0, 0.0, 1.0 ); glTranslatef(self.swarm.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(self.swarm.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 glPopMatrix(); glFlush() else: for i in range (len(self.swarm.group)): glLoadName(i) glPushMatrix(); glRotatef(4.5*i, 0.0, 0.0, 1.0 ); glTranslatef(self.swarm.getPeerNormUP(i), 0.0, 0.0); glutSolidSphere(self.swarm.getPeerRep(i)/6, 100, 100 ); t=t+math.pi/40 glPopMatrix(); glFlush() def PickPeers(self, event): BUFSIZE = 1000 point = event.GetPosition() x=point[0] y=point[1] viewport=glGetIntegerv(GL_VIEWPORT) glSelectBuffer(BUFSIZE) glRenderMode(GL_SELECT) glInitNames(); glPushName(0); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); #create 10x10 pixel picking region near cursor location */ gluPickMatrix( x, (viewport[3] - y),5, 5, viewport); glOrtho(-25, 25, -45, 45, -1, 1); self.drawOnSelect(); glPopMatrix(); glFlush(); buffer = glRenderMode(GL_RENDER); for hit_record in buffer: min_depth, max_depth, names = hit_record prop = self.swarm.getPeerProperties(names[0]) win = TransientPopup(self,wx.SIMPLE_BORDER,prop) win.Position(point,(15,15)) win.Popup() return def OnRightDown(self, event): BUFSIZE = 1000 point = event.GetPosition() x=point[0] y=point[1] viewport=glGetIntegerv(GL_VIEWPORT) glSelectBuffer(BUFSIZE) glRenderMode(GL_SELECT) glInitNames(); glPushName(0); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); #create 10x10 pixel picking region near cursor location */ gluPickMatrix( x, (viewport[3] - y),5, 5, viewport); glOrtho(-25, 25, -45, 45, -1, 1); self.drawOnSelect(); glPopMatrix(); glFlush(); buffer = glRenderMode(GL_RENDER); for hit_record in buffer: self.ID1 = wx.NewId() self.ID2 = wx.NewId() self.Bind(wx.EVT_MENU, self.Block, id=self.ID1) self.Bind(wx.EVT_MENU, self.Prioritise, id=self.ID2) menu = wx.Menu() menu.Append(self.ID1, "Block user") menu.Append(self.ID2, "Give user priority") self.PopupMenu(menu) menu.Destroy() #Function enabled on right down-->Block def Block(self, event): print "USER BLOCKED" #PUT SOMETHING TO WRITE TO LOG #Function enabled on right down --> Prioritise def Prioritise(self, event): print "USER HAS BEEN GIVEN PRIORITY" #PUT SOMETHING TO WRITE TO LOG def InitGL(self): glutInit(sys.argv) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glClearColor(0.,0.,0.,0.); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glDepthRange(0.0, 1.0); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); lightZeroPosition = [10.,10.,10.,0.] lightZeroColor = [0.8,1.0,0.8,1.0] glLightfv(GL_LIGHT0, GL_POSITION, lightZeroPosition) glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor) glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1) glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05) glEnable(GL_LIGHT0) glViewport(0,0,wx.DisplaySize()[0],wx.DisplaySize()[1]); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-25, 25, -45, 45, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); return class TransientPopup(wx.PopupTransientWindow): def __init__(self, parent, style,prop): wx.PopupTransientWindow.__init__(self, parent, style) self.SetBackgroundColour("#c0c0c0") st = wx.StaticText(self, -1,prop,pos=(10,10)) sz = st.GetBestSize() self.SetSize((sz.width+20, sz.height+20)) def main(): app = wxPySimpleApp() frame = wxFrame(None,-1,'Prototype PyOpenGL',wxDefaultPosition,wx.DisplaySize()) canvas = myGLCanvas(frame) #frame.Show() frame.ShowFullScreen(True) app.MainLoop() if __name__ == '__main__': main()