Subversion Repositories HomeAutomation

Rev

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
}