Ejemplo n.º 1
0
    def run(self):
        SOCK_CLOSE_STATE = 1
        SOCK_OPENTRY_STATE = 2
        SOCK_OPEN_STATE = 3
        SOCK_CONNECTTRY_STATE = 4
        SOCK_CONNECT_STATE = 5

        idle_state = 1
        datasent_state = 2

        sys.stdout.write('thread for %r ' % self.serverip)
        sys.stdout.write('is starting\r\n')

        # TCPClient instance creation

        client = TCPClient(2, self.serverip, self.serverport)
        filename = self.serverip + '_log.txt'

        #print(filename)
        IsTimeout = 0

        self.f = open(filename, 'w+')

        while True:
            if client.state is SOCK_CLOSE_STATE:
                cur_state = client.state
                client.state = client.open()
                if client.state != cur_state:
                    sys.stdout.write('client.state is %r\r\n' % client.state)
                time.sleep(1)

            elif client.state is SOCK_OPEN_STATE:
                cur_state = client.state
                client.state = client.connect()
                if client.state != cur_state:
                    sys.stdout.write('client.state is %r\r\n' % client.state)
                time.sleep(1)

            elif client.state is SOCK_CONNECT_STATE:
                if client.working_state == idle_state:
                    try:
                        client.write(msg)
                        client.working_state = datasent_state
                        self.istimeout = 0
                        self.totaltrycount += 1

                        self.timer1 = threading.Timer(5.0, self.myTimer)
                        self.timer1.start()
                    except Exception as e:
                        sys.stdout.write('%r\r\n' % e)
                elif client.working_state == datasent_state:
                    response = client.readline()
                    if (response != ""):
                        sys.stdout.write(response)
                        sys.stdout.write('\n')
                        sys.stdout.flush()
                        self.timer1.cancel()
                        self.istimeout = 0

                        if (msg in response):
                            logstr = '[' + self.serverip + ']' + strftime(
                                "%d %b %Y %H:%M:%S",
                                localtime()) + ': success\r\n'
                            sys.stdout.write(logstr)
                            self.successcount += 1
                            time.sleep(10)
                            client.working_state = idle_state
                        else:
                            logstr = '[' + self.serverip + ']' + strftime(
                                "%d %b %Y %H:%M:%S",
                                localtime()) + ': fail by broken data\r\n'
                            sys.stdout.write(logstr)
                            self.failcount += 1
                            self.f.write(logstr)
                            self.f.write("\r\n")
                            time.sleep(10)
                            client.working_state = idle_state

                    if self.istimeout is 1:
                        self.timer1.cancel()
                        self.istimeout = 0
                        logstr = '[' + self.serverip + ']' + strftime(
                            "%d %b %Y %H:%M:%S",
                            localtime()) + ': fail by timeout\r\n'
                        sys.stdout.write(logstr)
                        self.failcount += 1
                        self.f.write(logstr)
                        self.f.write("\r\n")
                        time.sleep(5)
                        client.working_state = idle_state

                    response = ""