Changeset 365


Ignore:
Timestamp:
04/15/2010 03:29:30 PM (10 years ago)
Author:
michael.kriegel
Message:

work in progress on making fatima connector migration compatible, incomplete and needs testing

File:
1 edited

Legend:

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

    r312 r365  
    3535import java.util.HashMap; 
    3636 
     37import org.w3c.dom.Document; 
     38import org.w3c.dom.Element; 
     39import org.w3c.dom.Node; 
     40import org.w3c.dom.Text; 
     41 
    3742import cmion.architecture.IArchitecture; 
     43import cmion.level2.migration.Migrating; 
    3844import cmion.level3.AgentMindConnector; 
    3945import cmion.level3.MindAction; 
    4046 
    4147 
    42 public class FAtiMAConnector extends AgentMindConnector { 
     48public class FAtiMAConnector extends AgentMindConnector implements Migrating { 
    4349 
    4450        /** the thread that runs the agent mind */ 
     
    5258        private boolean sleeping; 
    5359         
    54         /** create a new FAtiMA connector */ 
     60        /** is the connected FAtiMA capable of migrating, i.e. can it send and receive 
     61         *  its agent state through the socket connection with this connector  
     62         *  (this feature was added to FAtiMA on 15/04/10)*/ 
     63        private boolean canMigrate; 
     64         
     65        /** the current state that was received from fatima */ 
     66        private String currentFatimaState; 
     67         
     68        /** remembers whether we have received a state from fatima or not*/ 
     69        private boolean hasCurrentFatimaState; 
     70         
     71        /** create a new FAtiMA connector that connects to an old version of  
     72         *  FAtiMA that cannot migrate (kept for backwards compatibility) */ 
    5573        public FAtiMAConnector(IArchitecture architecture)  
    5674        { 
     
    5977                sleeping = false; 
    6078                mindThread = null; 
     79                canMigrate = false; 
    6180                new ListenForConnectionThread().start(); 
    6281        } 
    6382 
     83        /** create a new FAtiMA connector */ 
     84        public FAtiMAConnector(IArchitecture architecture, String migrating)  
     85        { 
     86                super(architecture); 
     87                fatimaConnected = false; 
     88                sleeping = false; 
     89                mindThread = null; 
     90                if (migrating.toLowerCase().trim().equals("true")) 
     91                        canMigrate = true; 
     92                else 
     93                        canMigrate = false; 
     94                new ListenForConnectionThread().start(); 
     95        } 
     96 
     97         
    6498        /** send a message to FAtiMA telling the mind to resume from a paused state */   
    6599        @Override 
     
    179213        } 
    180214 
     215        @Override 
     216        public String getMessageTag()  
     217        { 
     218                return "fatimaconnector"; 
     219        } 
     220 
     221        @Override 
     222        public void onMigrationFailure() { 
     223                System.out.println("MIND-Migration Failed.");    
     224        } 
     225 
     226        @Override 
     227        public void onMigrationIn() { 
     228                System.out.println("MIND-Receiving a migration.");       
     229        } 
     230 
     231        @Override 
     232        public void onMigrationOut() { 
     233                System.out.println("MIND-Going to migrate."); 
     234        } 
     235 
     236        @Override 
     237        public void onMigrationSuccess() { 
     238                System.out.println("MIND-Migration Success."); 
     239        } 
     240 
     241        @Override 
     242        public void restoreState(Element message)  
     243        { 
     244                if (canMigrate) 
     245                { 
     246                        if (message.hasChildNodes()) 
     247                        { 
     248                                String state = message.getChildNodes().item(0).getNodeValue(); 
     249                                System.out.println("fatima state: " + state); 
     250                        } 
     251                         
     252                }  
     253                else     
     254                        System.out.println("this version of fatima cannot load the incoming state"); 
     255        } 
     256 
     257        @Override 
     258        public Element saveState(Document doc)  
     259        { 
     260                Element parent = doc.createElement(getMessageTag()); 
     261                if (canMigrate) 
     262                {                        
     263                        currentFatimaState = null; 
     264                        hasCurrentFatimaState = false; 
     265                         
     266                        // obtain state from fatima 
     267                        mindThread.send("CMD GET-STATE"); 
     268                         
     269                        // now wait until the mind thread has received the state 
     270                        while (!this.hasCurrentFatimaState) 
     271                        { 
     272                                try { 
     273                                        Thread.sleep(100); 
     274                                } catch (InterruptedException e) {} 
     275                        } 
     276 
     277                        System.out.println("fatima state: " + currentFatimaState); 
     278                        Node state = doc.createTextNode(currentFatimaState); 
     279                        parent.appendChild(state); 
     280                }  
     281                else 
     282                { 
     283                        System.out.println("this version of fatima cannot save its state"); 
     284                } 
     285                return parent; 
     286        } 
     287 
     288        /** this message is called by the connected fatima listener, when it receives  
     289         *  a state from fatima */ 
     290        public void notifyState(String state)  
     291        { 
     292                currentFatimaState = state; 
     293                hasCurrentFatimaState = true; 
     294        } 
     295 
    181296 
    182297 
Note: See TracChangeset for help on using the changeset viewer.