def behandlBeskeder(): starttid = time.time() maxTaeller = 0; conResSendt = False global sidsteBeskedTid global forskelITidTOLERANCE while (True): beskedFraKlienten = modtag() '''MAX 25 beskeder per sekund -starttid opdateres ved den første besked''' if (maxTaeller == 0): starttid = time.time() '''MAX 25 beskeder per sekund. For mange, sendes FEJL til klienten''' if(maxTaeller == 25): elapsed = time.time() - starttid if (elapsed < 1.0): print("S: For mange beskeder") svarTilMsg(2, klientadressen) if(beskedFraKlienten): maxTaeller += 1 '''TOLERANCE: tid mellem beskeder udregnes og sidsteBeskedTid opdateres''' forskelITidTOLERANCE = time.time()-sidsteBeskedTid sidsteBeskedTid = time.time() '''Klienten kvitterer max per sekund og forbindelsen lukkes''' if(beskedFraKlienten[0].decode().__eq__("con-res 0xFF")): print("C: " + beskedFraKlienten[0].decode()) serverSocket.close() sys.exit(0) return elif(beskedFraKlienten[0].decode().__eq__("con-h 0x00")): '''Serveren modtager heartbeat og sender ok''' svarTilMsg(3,klientadressen) print("modtager con-h") else: '''Serveren svarer enten res (1) eller FEJL (2) afhængig af, om protokollen er overholdt''' infoTuble = SplitBesked.splitBeskeden(beskedFraKlienten, "=", "C: ") if(infoTuble): if (infoTuble[0].__eq__("msg") and infoTuble[1].__eq__(str(taeller))): svarTilMsg(1, klientadressen) else: svarTilMsg(2, klientadressen)
def handshake(): while (True): global sidsteBeskedTid global forskelITidTOLERANCE beskedFraKlienten = modtag() if(beskedFraKlienten): '''beskeden splittes: [0] protokoldelen [1] taeller [2] besked''' infoTuble = SplitBesked.splitBeskeden(beskedFraKlienten, " ", "C: "); if(infoTuble[0].__eq__("com") & infoTuble[1].__eq__(str(taeller))): '''hvis com-0 IP korrekt, sendes accept til klienten''' if(infoTuble[2].__eq__(serverIP)): svarFraServeren = "com-" + str(taeller) + " accept " + serverIP print("S: " + svarFraServeren) beskedTilKlient = str.encode(svarFraServeren) serverSocket.sendto(beskedTilKlient, klientadressen) '''hvis com-0 accept, etableres forbindelsen''' if (infoTuble[2].__eq__("accept")): print("Klienten har accepteret og forbindelsen er etableret") '''Handshake logges, a = append''' f = open("Scripts\log", "a") nu = time.ctime(time.time()) f.write("handshake " + str(nu) + "\n") f.close() '''tiden for TOlERANCE opdateres''' forskelITidTOLERANCE = time.time() - sidsteBeskedTid sidsteBeskedTid = time.time() return True break else: print("S: Fejl i handshake") svarTilMsg = "FEJL" sendTilKlient = str.encode(svarTilMsg) serverSocket.sendto(sendTilKlient, klientadressen) '''Når klienten har lukket, lukkes serveren også''' if (ConnectionError): serverSocket.close() sys.exit(0)
def behandlBesked(automatiseringValgt, autoBeskederAntal): autoBeskedTaeller = 1 '''Holder styr på omgangene af autobeskeder (serveren svarer til dem alle) Når vi er færdige, skal vi over til almindelig chat (hvis serveren ikke har lukket pga TOLERANCE.)''' while (True): svarFraServer = modtag() if (svarFraServer): global taeller if (svarFraServer[0].decode().__eq__("okhb")): '''serveren anerkender heartbeat, men der er ikke behov handling fra klientens side''' else: '''beskeden splittes: [0] protokoldelen [1] taeller [2] besked''' infoTuple = SplitBesked.splitBeskeden(svarFraServer, "=", "S: ") if (infoTuple[0].__eq__("res") & infoTuple[1].__eq__(str(taeller + 1))): '''taeller gøres klar til næste omgang''' taeller = taeller + 2 sendBesked(automatiseringValgt) ''' Hvis autobeskeder valgt, tæller vi dem. Når vi rammer antallet angivet i opt.conf, skal almindelig chat begynde (hvis under 25 autobeskeder per sec, dvs. inden for tolerance). Så taeller tilføjes 2, automatisering false og antallet af autobeskeder til 0. ''' if (autoBeskederAntal > 0): autoBeskedTaeller += 1 '''Når vi er færdig med autoantal, skal vi igang med chat, hvis der var under 25 per sekund''' if (autoBeskedTaeller == autoBeskederAntal): taeller += 2 automatiseringValgt = False autoBeskedTaeller = 0 else: print("protokolkontrol") sendBesked(False)
def handshake(): while (True): global forskelHEARTBEAT global sidsteSendt '''Klienten sender først request om handshake ''' beskedFraKlient = "com-" + str(taeller) + " " + serverIP print("C: " + beskedFraKlient) encodedBesked = str.encode(beskedFraKlient) klientSocket.sendto(encodedBesked, serverAdressen) '''SidstSendt blev sat til time.timer(), da main-tråden begyndte at køre. Nu opdateres forskellen for at udregne behover for heartbeat og tiden, som både heartbeat og consoletjek bruger.''' forskelHEARTBEAT = time.time() - sidsteSendt sidsteSendt = time.time() svarFraServer = modtag() if (svarFraServer): '''beskeden splittes: [0] protokoldelen [1] taeller [2] besked''' infoTuple = SplitBesked.splitBeskeden(svarFraServer, " ", "S: ") '''besked-delen opdeles yderligere i accept og IP''' acceptDelen = infoTuple[2].split() accept = acceptDelen[0] '''hvis protokollen overholdes, sender klienten com-0 accept til serveren''' if (infoTuple[0].__eq__("com") & infoTuple[1].__eq__(str(taeller)) & accept.__eq__("accept") & svarFraServer[1][0].__eq__(serverIP)): ''' FEJL I HANDSHAKE COM ''' ack = "daniel-" + str(taeller) + " accept" print("C: " + ack) sendSvarTilServer = str.encode(ack) klientSocket.sendto(sendSvarTilServer, serverAdressen) return True break else: return False