OSDN Git Service

Version 0.6.77, add X.Util & X.Net. enjoy!
[pettanr/clientJs.git] / 0.6.x / js / 04_net / 00_XNet.js
1 // TODO  onlineevent offlineevent, netspeed\r
2 X.Net = {\r
3 \r
4         get : function( url ){\r
5                 return new X_NET_Queue( X_NET_TYPE_XHR, { get : url } );\r
6         },\r
7         \r
8         post : function( url ){\r
9                 return new X_NET_Queue( X_NET_TYPE_XHR, { post : url } );\r
10         },\r
11         \r
12         // TODO chashe\r
13         jsonp : function( url ){\r
14                 return new X_NET_Queue( X_NET_TYPE_JSONP, url );\r
15         }\r
16 \r
17 };\r
18 \r
19 var X_NET_TYPE_XHR   = 1,\r
20         X_NET_TYPE_JSONP = 2,\r
21         X_NET_TYPE_FORM  = 3,\r
22 \r
23         X_NET_QUEUE_LIST = [],\r
24 \r
25         X_NET_XHRWrapper,\r
26         X_NET_JSONPWrapper,\r
27         X_NET_FORMWrapper,\r
28 \r
29         X_NET_currentWrapper,\r
30         X_NET_currentQueue,\r
31 \r
32         X_NET_Queue = X.EventDispatcher.inherits(\r
33                 'XNetQueue',\r
34                 X.Class.POOL_OBJECT,\r
35                 {\r
36                         type : 0,\r
37                         data : null,\r
38                         \r
39                         Constructor : function( type, data ){\r
40                                 this.type = type;\r
41                                 this.data = data;                               \r
42                                 \r
43                                 X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;\r
44                                 !X_NET_currentQueue && X_NET_shiftQueue();\r
45                         },\r
46                         \r
47                         cancel : function(){\r
48                                 var i = X_NET_QUEUE_LIST.indexOf( this );\r
49                                 if( i !== -1 ){\r
50                                         X_NET_QUEUE_LIST.splice( i, 1 );\r
51                                 } else\r
52                                 if( this === X_NET_currentQueue ){\r
53                                         X_NET_currentWrapper.cancel();\r
54                                 };\r
55                         }\r
56                 }\r
57         );\r
58 \r
59 function X_NET_proxyDispatch( e ){\r
60         switch( e.type ){\r
61                 case X.Event.SUCCESS :\r
62                 case X.Event.ERROR :\r
63                         this.asyncDispatch( 0, e );\r
64                         //this.kill();\r
65                         X_NET_shiftQueue();\r
66                         break;\r
67                 case X.Event.PROGRESS :\r
68                         this.dispatch( 0, e );\r
69         };\r
70 };\r
71 \r
72 function X_NET_shiftQueue(){\r
73         var queue;\r
74         \r
75         if( X_NET_currentQueue ){\r
76                 if( X_NET_currentWrapper._busy ) return;\r
77                 X_NET_currentWrapper.unlisten( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], X_NET_currentQueue, X_NET_proxyDispatch );\r
78         };\r
79         \r
80         if( !X_NET_QUEUE_LIST.length ){\r
81                 X_NET_currentQueue = X_NET_currentWrapper = null;\r
82                 return;\r
83         };\r
84         queue = X_NET_QUEUE_LIST.shift();\r
85         \r
86         switch( queue.type ){\r
87                 case X_NET_TYPE_XHR :\r
88                         X_NET_currentWrapper = X_NET_XHRWrapper;\r
89                         break;\r
90                 case X_NET_TYPE_JSONP :\r
91                         X_NET_currentWrapper = X_NET_JSONPWrapper;\r
92                         break;\r
93                 case X_NET_TYPE_FORM :\r
94                         X_NET_currentWrapper = X_NET_FORMWrapper;\r
95                         break;\r
96         };\r
97         \r
98         X_NET_currentWrapper.listen( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
99         \r
100         X_NET_currentWrapper.load( queue.data );\r
101 };\r
102 \r