source: trunk/instant_messenger/js/connector.js @ 151

Revision 151, 4.5 KB checked in by niltonneto, 16 years ago (diff)

Commit da nova versão do módulo, usando agente em C.
Vide Página do módulo do Trac:
http://www.expressolivre.org/dev/wiki/messenger

A versão anterior encontra-se na subpasta bkp (32/64).

Line 
1function Connector()
2{
3}
4
5Connector.prototype = {
6        'go' : function()
7        {
8                // connection
9                var __HTTP__ = null;
10                var __THREADS__ = [];
11                var index = 0;
12                var rtlen = 0;
13                var ie = false; // ie don't has stream
14                function makeConnection()
15                {
16                        if ( __HTTP__ == null )
17                                __HTTP__ = xhr();
18                }
19                function setPost(pThread)
20                {
21                        __THREADS__[pThread].__METHOD__ = 'POST';
22                        return true;
23                }
24                // this set __THREADS__[?].__TYPE__ to 4 for request or 3 for stream
25                function setStream(pThread)
26                {
27                        __THREADS__[pThread].__TYPE__ = ( !ie ) ? 3 : 4;
28                        return true;
29                }
30                function trim(pData)
31                {
32                        return pData.replace(/^ +| +$/g, '');
33                }
34                function verifyUserHandler(pThread, pHandler)
35                {
36                        var type_of_handler = typeof pHandler;
37                        var i;
38                        switch ( type_of_handler )
39                        {
40                                case 'function' :
41                                        return true;
42                                break;
43                                case 'object' :
44                                        for ( i in pHandler )
45                                                if ( i != 'stream' && i != 'request' )
46                                                        return false;
47                                                else if ( i == 'stream' )
48                                                        setStream(pThread)
49                                        return true;
50                                break;
51                                default :
52                                        return false;
53                        }
54                }
55                // xhr = XMLHttpRequest
56                function xhr()
57                {
58                        try
59                        {
60                                return new XMLHttpRequest();
61                        }
62                        catch (e)
63                        {
64                                ie = true;
65                                try
66                                {
67                                        return new ActiveXObject('Msxml2.XMLHTTP');
68                                }
69                                catch (e1)
70                                {
71                                        try
72                                        {
73                                                return new ActiveXObject('Microsoft.XMLHTTP');
74                                        }
75                                        catch (e2)
76                                        {
77                                                return null;
78                                        }
79                                }
80                        }
81                }
82
83                var __HANDLER__ = function()
84                {
85                        try
86                        {
87                                if ( ie && __HTTP__.readyState != 4 )
88                                        return false;
89
90                                var threadId = __HTTP__.getResponseHeader('ThreadId');
91                                if ( !threadId )
92                                        return false;
93
94                                var type = __THREADS__[threadId].__TYPE__;
95                                if ( __HTTP__.readyState == 3 || __HTTP__.readyState == 4 )
96                                {
97                                        if ( !ie && __HTTP__.readyState == 3 && __THREADS__[threadId].__HANDLER__.stream )
98                                        {
99                                                var data = trim(__HTTP__.responseText.substr(index));
100                                                rtlen = __HTTP__.responseText.length;
101                                                if ( index < rtlen && data.length )
102                                                {
103                                                        __THREADS__[threadId].__HANDLER__.stream(data);
104                                                        index = rtlen;
105                                                }
106                                        }
107                                        if ( __THREADS__[threadId].__HANDLER__.request && __HTTP__.readyState == 4 )
108                                        {
109                                                switch ( __HTTP__.status )
110                                                {
111                                                        case 200:
112                                                                var data = ( __THREADS__[threadId].__MODE__ == 'XML' ) ?
113                                                                        __HTTP__.responseXML :
114                                                                        __HTTP__.responseText;
115
116                                                                if ( ie && __THREADS__[threadId].__HANDLER__.stream )
117                                                                        __THREADS__[threadId].__HANDLER__.stream(data);
118
119                                                                if ( __THREADS__[threadId].__HANDLER__.request )
120                                                                        __THREADS__[threadId].__HANDLER__.request(data);
121
122                                                                break; // [case : status 200]
123                                                        case 404:
124                                                                alert('Page Not Found!');
125                                                                break; // [case : status 404]
126                                                        default:
127                                                }
128                                        }
129                                }
130                                if ( __HTTP__.readyState == 4 )
131                                {
132                                        delete __THREADS__[threadId];
133                                }
134                        }
135                        catch(e)
136                        {
137                                //alert("__HANDLER__\n" + threadId + "\n " + e + "\n ErroR: " + e.description);
138                                //delete __THREADS__[threadId];
139                        }
140                };
141
142                var argc = arguments.length;
143                if ( argc < 2 || argc > 4 )
144                        return {'error':'#0 - invalid params'};
145
146                if ( __THREADS__[arguments[0]] )
147                        return {'error':'#2 - request is running'};
148
149                __THREADS__[arguments[0]] = {
150                        '__HANDLER__' : arguments[1],
151                        '__METHOD__'  : 'GET',  // __METHOD__ = [GET | POST]
152                        '__MODE__'    : 'TEXT', // __MODE__ = [XML | TEXT]
153                        '__TYPE__'    : 4       // __TYPE__ = [4 for request | 3 for stream]
154                };
155
156                makeConnection();
157
158                if ( !verifyUserHandler(arguments[0], arguments[1]) )
159                {
160                        delete __THREADS__[arguments[0]];
161                        return {'error':'#1 - invalid handler'};
162                }
163
164                if ( argc == 3 )
165                        setPost(arguments[0]);
166
167                if ( __HTTP__ != null )
168                {
169                        try
170                        {
171                                var __TARGET__ = path_im + 'controller.php?act=' + arguments[0];
172                                var __SEND__ = null;
173                                __HTTP__.open(__THREADS__[arguments[0]].__METHOD__, __TARGET__, true);
174                                if ( __THREADS__[arguments[0]].__METHOD__ == 'POST' )
175                                {
176                                        __HTTP__.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
177                                        __HTTP__.setRequestHeader('Cache-Control',  'no-store, no-cache, must-revalidate');
178                                        __HTTP__.setRequestHeader('Cache-Control', 'post-check=0, pre-check=0');
179                                        __HTTP__.setRequestHeader('Pragma', 'no-cache');
180                                        __SEND__ = arguments[2];
181                                }
182                                //__HTTP__.setRequestHeader('ThreadId', arguments[0]);
183                                //__HTTP__.setRequestHeader('Connection', 'close');
184                                //__HTTP__.setRequestHeader('Keep-Alive', '0');
185                                __HTTP__.onreadystatechange = __HANDLER__;
186                                __HTTP__.send(__SEND__);
187                        }
188                        catch(e)
189                        {
190                                alert("go\n" + e.description)
191                                return {'error':'#3 - ' + e.description};
192                        }
193                }
194        }
195};
Note: See TracBrowser for help on using the repository browser.