Changeset 376


Ignore:
Timestamp:
04/20/2010 02:39:14 PM (10 years ago)
Author:
michael.kriegel
Message:

improvements to fatima state migration

Location:
libs/cmion/cmionMain/src/cmion/level3/fatima
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libs/cmion/cmionMain/src/cmion/level3/fatima/FAtiMAConnector.java

    r368 r376  
    7070        private boolean hasCurrentFatimaState; 
    7171         
     72        /** indicates whether fatima has finished setting/loading a state that we sent to it  
     73         * (because of incoming migration) */ 
     74        private boolean fatimaStateSet; 
     75         
    7276        /** create a new FAtiMA connector that connects to an old version of  
    7377         *  FAtiMA that cannot migrate (kept for backwards compatibility) */ 
     
    8286        } 
    8387 
    84         /** create a new FAtiMA connector */ 
    85         public FAtiMAConnector(IArchitecture architecture, String migrating)  
     88        /** create a new FAtiMA connector, with an additional options parameter 
     89         *  this can at the moment contain any of the following substrings in any order 
     90         *   - "migrating" : indicates that the fatima connecting here supports migration 
     91         *                               (see boolean canMigrate)  
     92         *   - "sleeping"  : immediately send this mind to sleep once it is connected, this 
     93         *                               is useful, if this platform is awaiting incoming migration and  
     94         *                               currently inactive 
     95         *    */ 
     96        public FAtiMAConnector(IArchitecture architecture, String options)  
    8697        { 
    8798                super(architecture); 
    8899                fatimaConnected = false; 
    89                 sleeping = false; 
    90100                mindThread = null; 
    91                 if (migrating.toLowerCase().trim().equals("true")) 
     101                String optionsStr = options.toLowerCase().trim(); 
     102                 
     103                if (optionsStr.contains("migrating")) 
    92104                        canMigrate = true; 
    93105                else 
    94106                        canMigrate = false; 
     107                 
     108                if (optionsStr.contains("sleeping")) 
     109                        sleeping = true; 
     110                else 
     111                        sleeping = false; 
     112         
    95113                new ListenForConnectionThread().start(); 
    96114        } 
     
    243261        public void restoreState(Element message)  
    244262        { 
    245                 if (canMigrate) 
     263                if (canMigrate  &&  (mindThread!=null)) 
    246264                { 
    247265                        if (message.hasChildNodes()) 
    248266                        { 
     267                                fatimaStateSet = false; 
     268                                 
    249269                                String state = message.getChildNodes().item(0).getNodeValue(); 
    250                                 System.out.println("fatima state: " + state); 
     270                                 
     271                                // send state to the mind 
     272                                mindThread.send("CMD SET-STATE "+state); 
     273                         
     274                                // wait until the mind has finished processing this state 
     275                                while (!fatimaStateSet) 
     276                                { 
     277                                        try { 
     278                                                Thread.sleep(100); 
     279                                        } catch (InterruptedException e) {} 
     280                                } 
     281                                 
     282                                // now that the state is set awake the mind 
     283                                awakeMind(); 
    251284                        } 
    252285                         
     
    260293        { 
    261294                Element parent = doc.createElement(getMessageTag()); 
    262                 if (canMigrate) 
     295                if (canMigrate &&  (mindThread!=null)) 
    263296                {                        
    264297                        currentFatimaState = null; 
    265298                        hasCurrentFatimaState = false; 
     299                         
     300                        // in order for the mind to serialize the state, it needs to be paused besides  
     301                        // now that we are migrating away from here, the mind should be paused anyway 
     302                         
     303                        // send the pause command 
     304                        this.sendMindToSleep(); 
     305                         
     306                        // wait a while to make sure current fatima cycle is complete 
     307                        try { 
     308                                Thread.sleep(2000); 
     309                        } catch (InterruptedException e1) {} 
    266310                         
    267311                        // obtain state from fatima 
     
    276320                        } 
    277321 
    278                         System.out.println("fatima state: " + currentFatimaState); 
    279322                        Node state = doc.createTextNode(currentFatimaState); 
    280323                        parent.appendChild(state); 
     
    289332        /** this message is called by the connected fatima listener, when it receives  
    290333         *  a state from fatima */ 
    291         public void notifyState(String state)  
     334        public void notifyGetState(String state)  
    292335        { 
    293336                currentFatimaState = state; 
     
    295338        } 
    296339 
     340        /** this message is called by the connected fatima listener, when it receives  
     341         *  a state from fatima */ 
     342        public void notifySetState()  
     343        { 
     344                fatimaStateSet = true; 
     345        } 
    297346 
    298347 
  • libs/cmion/cmionMain/src/cmion/level3/fatima/FAtiMAListenerThread.java

    r248 r376  
    100100                        this.send("OK"); 
    101101                         
     102                        // if agent should be sleeping, tell it to pause 
     103                        if (connector.isMindSleeping()) 
     104                                this.send("CMD Stop"); 
     105                         
     106                         
    102107                } 
    103108                else if(type.startsWith("<EmotionalState"))  
     
    134139                        this.send(response); 
    135140                } 
     141                else if (type.equals("STATE")) 
     142                { 
     143                        String state = st.nextToken(); 
     144                        connector.notifyGetState(state); 
     145                } 
     146                else if (type.equals("STATE-SET")) 
     147                { 
     148                        connector.notifySetState(); 
     149                } 
    136150                else { 
    137151                        //Corresponds to an action 
Note: See TracChangeset for help on using the changeset viewer.