Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
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)
Exemplo n.º 4
0
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