Subversion Repositories HomeAutomation

Rev

Rev 641 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. import mx.utils.Delegate;
  2.  
  3. class CommunicationObj {
  4.    
  5.     var isConnected:Boolean;
  6.     var mySocket:XMLSocket;
  7.     var hostname:String;
  8.     var dataReceivers:Array;
  9.     var userName:String;
  10.     var passWd:String
  11.    
  12.     function CommunicationObj (host:String) {
  13.         isConnected = false;
  14.        
  15.         hostname = host;
  16.        
  17.         mySocket = new XMLSocket();
  18.         mySocket.onData = Delegate.create(this, onData);
  19.         mySocket.onClose = Delegate.create(this, onClose);
  20.         mySocket.onConnect = Delegate.create(this, onConnect);
  21.         var intervalID:Number = setInterval(this, "timerConnect", 15000);
  22.  
  23.         timerConnect();
  24.     }       //end constructor
  25.    
  26.     function setDataReceiver(objs:Array) {
  27.         dataReceivers = objs;
  28.        
  29.         for (var i:Number = 0; i < dataReceivers.length; i++) {
  30.             dataReceivers[i].setCommunicator(this);
  31.         }
  32.        
  33.     }
  34.    
  35.     public function sendToServer(data:XML) {
  36.         if (isConnected) {
  37.             mySocket.send(data + "\n");
  38.         }
  39.         //trace(data);
  40.     }
  41.    
  42.    
  43.     private function onData(msg) {
  44.         //trace("Got data: " + msg.charCodeAt(0) + " " + msg.charCodeAt(1) + " " + msg.charCodeAt(2));
  45.         //ta bort alla linefeed \n och carrage return \r
  46.         msg = replace(msg, "\n", "");
  47.         msg = replace(msg, "\r", "");
  48.         var msgXML:XML = new XML(msg);
  49.        
  50.         //trace(msg);
  51.        
  52.         //trace("nodename: " + msgXML.firstChild.nodeName);
  53.         //trace("id: " + msgXML.firstChild.attributes.id);
  54.        
  55.        
  56.         //trace("blipp");
  57.         if (msgXML.firstChild.nodeName == "packet") {
  58.  
  59.             var menuName:String = msgXML.firstChild.attributes.menuid;
  60.             var dataList:XMLNode = msgXML.firstChild.firstChild;
  61.            
  62.             //msgXML.firstChild.firstChild, egentligen skulle den rota igenom
  63.             //alla childs, det kanske kan komma flera data i samma paket
  64.  
  65.             for (var i:Number = 0; i < dataReceivers.length; i++) {
  66.                 if (menuName == dataReceivers[i].getName()) {
  67.                     dataReceivers[i].setNewData(dataList);
  68.                     //mainMenu.setNewData(dataList, middleItem);
  69.                 }              
  70.             }
  71.  
  72.             /*
  73.             //rota igenom dataReceivers, använd deras getName-funktion
  74.             //om dess namn stämmer med namnet i xml-datan så skicka listan dit
  75.             var middleItem:Number = 0;
  76.             var dataList:XMLNode;
  77.             var menuName:String;
  78.            
  79.             dataList = msgXML.firstChild;
  80.             //trace(dataList);
  81.             for (var aNode:XMLNode = msgXML.firstChild.firstChild; aNode != null; aNode=aNode.nextSibling) {
  82.                 if (aNode.nodeName == "contentname") {
  83.                     menuName = aNode.firstChild.nodeValue;
  84.                     for (var i:Number = 0; i < dataReceivers.length; i++) {
  85.                         if (menuName == dataReceivers[i].getName()) {
  86.                             dataReceivers[i].setNewData(dataList);
  87.                             //mainMenu.setNewData(dataList, middleItem);
  88.                         }              
  89.                     }
  90.                 }
  91.             }*/
  92.         }
  93.     }
  94.    
  95.     private function onClose() {
  96.         trace("Server closed connection!");
  97.         //msgArea.htmlText = "<b>Server closed connection</b><br>" + msgArea.htmlText;
  98.         //intervalID = setInterval(this, "timerConnect", 5000);
  99.         isConnected = false;
  100.     }
  101.    
  102.     public function setLogin(username:String, pass:String) {
  103.         passWd = pass;
  104.         userName = username;
  105.        
  106.     }
  107.    
  108.     private function onConnect(success) {
  109.         if (success) {
  110.             trace("Server connection established!");
  111.             //msgArea.htmlText = "<b>Server connection established!</b><br>" + msgArea.htmlText;
  112.  
  113.             isConnected = true;
  114.            
  115.             //skicka login om det är configurerat
  116.             if (passWd != "" && userName != "") {
  117.                 sendToServer(new XML("<flinshpacket login=\"" + userName + "\" pass=\"" + passWd + "\" />"));
  118.             }
  119.            
  120.         } else {
  121.             //msgArea.htmlText = "<b>Server connection failed!</b><br>" + msgArea.htmlText;
  122.             trace("Server connection failed!");
  123.             isConnected = false;
  124.             //intervalID = setInterval(this, "timerConnect", 5000);
  125.             //mySocket.connect("deep.arune.se", 2229);
  126.         }
  127.     }
  128.    
  129.     private function timerConnect() {
  130.         //  intervalID = null;
  131.         if (!isConnected) {
  132.             mySocket.connect(hostname, 2229);
  133.             //msgArea.htmlText = "<b>Connecting...</b><br>" + msgArea.htmlText;
  134.         } else {
  135.             mySocket.send("<ping />\n");
  136.         }
  137.        
  138.     }
  139.  
  140.     private function replace(holder:String, searchfor:String, replacement:String):String {
  141.         //trace("inte här");
  142.         var temparray:Array = holder.split(searchfor);
  143.         holder = temparray.join(replacement);
  144.         return (holder);
  145.     }
  146. }