Details | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 3 | - | 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 | } |