class ClientThread(threading.Thread):

    def __init__(self,ip,port,sock,mmObject,rloc):
        threading.Thread.__init__(self)
        self.ip = ip
        self.port = port
        self.socket = sock
        self.f = open("log"+str(random.getrandbits(16))+".log","w")
        self.log("Thread created.","General")
        self.state = States.general
        self.rollinghash = "none"
        self.packetProcessor = PacketProcess(mmObject,rloc)
        self.authenticated = False
        self.lastconnection = int(round(time.time() * 1000))
        self.mmObj = mmObject

    def run(self):
        self.log("Thread running.","General")
        runningThread = True
        while runningThread:
            #Wait for input
            try:
                data = self.receive()
            except socket.error, e: 
                print e
                break
            self.lastconnection = self.getTimeMS()
            if(data is not None or len(data) > 0):
                #split data
                #Possible multiple packets
                numberOfPackets = len(str(data).split(">")) - 1
                #Get them to list
                self.packetsReceived = [] 
                for i in range(0,numberOfPackets):
                    self.packetsReceived.append(str(data).split(">")[i].strip())
                for stop in self.packetsReceived:
                    if stop is None or stop == "":
                        continue
                    self.log(stop,"Received")
                    #Process input
                    state = processorStates((str(stop).split(":")[0]).strip())
                    command = processorCommands((str(stop).split(":")[1]).strip())
                    arg = str(str(stop).split(":")[2]).strip()
                    response = self.packetProcessor.processPacket(state,command,arg)
                    if response is not None:
                        #Identify all packets
                        response = response + ">"
                        #return self.packetProcessor.processPacket(command,arg)
                        self.log(response,"Pushed")
                        if(self.packetProcessor.disconnect):
                            runningThread = False
                        else:
                            self.send(response)
        #Close connection
        self.log("Disconnecting","General")
        self.f.close()
 def __init__(self,ip,port,sock,mmObject,rloc):
     threading.Thread.__init__(self)
     self.ip = ip
     self.port = port
     self.socket = sock
     self.f = open("log"+str(random.getrandbits(16))+".log","w")
     self.log("Thread created.","General")
     self.state = States.general
     self.rollinghash = "none"
     self.packetProcessor = PacketProcess(mmObject,rloc)
     self.authenticated = False
     self.lastconnection = int(round(time.time() * 1000))
     self.mmObj = mmObject