Ejemplo n.º 1
0
class Mind(object):
    __instance = None

    def __init__(self, verbose=True, dbpath="../agentdata"):
        self.__lastError = None
        self.output = print
        self.__clock = 0
        self.verbose = verbose
        self.windows = []

        self.attention = Attention(self)
        self.language = Language(self)

        self.bodyWindow = BodyWindow.create(self)

        self.memory = Memory(self, dbpath)
        self.workingMemory = WorkingMemory(self)

        self.currentWindow = self.bodyWindow

        #TODO: a memory window!!!
        self.memoryWindow = MemoryWindow.create(self)
        self.attention.start()

    def shutdown(self):
        self.memory.shutdown()
        self.attention.completed = True
        for window in self.windows:
            window.completed = True
            print("stopped")

    def tick(self):
        self.__clock += 1

    def clock(self):
        return self.__clock

    @classmethod
    def singleton(cls, output):
        if cls.__instance == None:
            cls.__instance = Mind()
        cls.__instance.setBodyOutput(output)
        return cls.__instance

    def __del__(self):
        self.shutdown()

    def version(self):
        return "Cognitive Agent Language For Mind Version 0.1\nTime + Space + Intelligence is at your service...."

    def prompt(self):
        return ">>>>"

    def say(self, message):
        #        self.log(message)
        self.output("log", message)

    def log(self, message):
        if self.verbose:
            print(message)

    def error(self, errorType, command):
        traceback.print_exc()
        self.__lastError = str(errorType) + ":" + str(command)
        self.log("ERROR: " + self.__lastError)
        return False

    def lastError(self):
        return self.__lastError

    def hasError(self):
        return (self.__lastError is not None)

    def clearError(self):
        self.__lastError = None

    def setBodyOutput(self, bodyOutput):
        self.output = bodyOutput

    def listen(self, message):
        return self.language.interpret(message)