OSDN Git Service

3f6e492615708cb9e450ed984614a8383449dbd5
[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         xhrGet : function( url ){\r
5                 return new X_NET_Queue( X_NET_TYPE_XHR, { type : 'get', get : url } );\r
6         },\r
7         \r
8         xhrPost : function( url ){\r
9                 return new X_NET_Queue( X_NET_TYPE_XHR, { type : 'post', post : url } );\r
10         },\r
11         \r
12         formGet : function(){\r
13                 \r
14         },\r
15         \r
16         formPost : function(){\r
17                 \r
18         },\r
19         \r
20         // TODO chashe\r
21         jsonp : function( url ){\r
22                 return new X_NET_Queue( X_NET_TYPE_JSONP, url );\r
23         },\r
24         \r
25         image : function(){\r
26                 \r
27         }\r
28 \r
29 };\r
30 \r
31 \r
32 var X_NET_IWrapper = function(){};\r
33         X_NET_IWrapper.prototype.load   = function(){};\r
34         X_NET_IWrapper.prototype.cancel = function(){};\r
35         X_NET_IWrapper.prototype.reset  = function(){};\r
36 \r
37 \r
38 var X_NET_TYPE_XHR   = 1,\r
39         X_NET_TYPE_JSONP = 2,\r
40         X_NET_TYPE_FORM  = 3,\r
41 \r
42         X_NET_QUEUE_LIST = [],\r
43 \r
44         X_NET_XHRWrapper,\r
45         X_NET_JSONPWrapper,\r
46         X_NET_FORMWrapper,\r
47 \r
48         X_NET_currentWrapper,\r
49         X_NET_currentQueue,\r
50 \r
51         X_NET_Queue = X.EventDispatcher.inherits(\r
52                 'XNetQueue',\r
53                 X.Class.POOL_OBJECT,\r
54                 {\r
55                         type : 0,\r
56                         data : null,\r
57                         \r
58                         Constructor : function( type, data ){\r
59                                 this.type = type;\r
60                                 this.data = data;                               \r
61                                 \r
62                                 this.listen( X.Event.COMPLETE, this, X_NET_proxyDispatch );\r
63                                 \r
64                                 X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;\r
65                                 !X_NET_currentQueue && X_NET_shiftQueue();\r
66                         },\r
67                         \r
68                         busy : function(){\r
69                                 return this === X_NET_currentQueue && X_NET_currentWrapper._busy;\r
70                         },\r
71                         \r
72                         cancel : function(){\r
73                                 var i = X_NET_QUEUE_LIST.indexOf( this );\r
74                                 if( i !== -1 ){\r
75                                         X_NET_QUEUE_LIST.splice( i, 1 );\r
76                                         this.asyncDispatch( 0, { type : X.Event.COMPLETE } );\r
77                                 } else\r
78                                 if( this === X_NET_currentQueue ){\r
79                                         X_NET_currentWrapper.cancel();\r
80                                 };\r
81                         }\r
82                 }\r
83         );\r
84 \r
85 function X_NET_proxyDispatch( e ){\r
86         switch( e.type ){\r
87                 case X.Event.BEFORE_KILL_INSTANCE :\r
88                         break;\r
89                 case X.Event.KILL_INSTANCE :\r
90                         break;                  \r
91                 case X.Event.KILL_INSTANCE_CANCELED :\r
92                         break;\r
93                 case X.Event.PROGRESS :\r
94                         console.log( 'q: ' + e.type );\r
95                         this.dispatch( e );\r
96                         break;\r
97                 case X.Event.SUCCESS :\r
98                 case X.Event.ERROR :\r
99                         console.log( 'q: ' + e.type );\r
100                         this.dispatch( e );\r
101                         this.asyncDispatch( 0, { type : X.Event.COMPLETE } );\r
102                         break;\r
103                 case X.Event.CANCELED :\r
104                         \r
105                         break;\r
106                 case X.Event.COMPLETE :\r
107                         this.kill();\r
108                         X_NET_shiftQueue();\r
109                         break;\r
110         };\r
111 };\r
112 \r
113 function X_NET_shiftQueue(){\r
114         var queue;\r
115         \r
116         if( X_NET_currentQueue ){\r
117                 if( X_NET_currentWrapper._busy ) return;\r
118                 X_NET_currentWrapper.unlisten( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS ], X_NET_currentQueue, X_NET_proxyDispatch );\r
119                 X_NET_currentQueue.reset();\r
120         };\r
121         \r
122         if( !X_NET_QUEUE_LIST.length ){\r
123                 X_NET_currentQueue = X_NET_currentWrapper = null;\r
124                 return;\r
125         };\r
126         queue = X_NET_QUEUE_LIST.shift();\r
127         \r
128         switch( queue.type ){\r
129                 case X_NET_TYPE_XHR :\r
130                         X_NET_currentWrapper = X_NET_XHRWrapper;\r
131                         break;\r
132                 case X_NET_TYPE_JSONP :\r
133                         X_NET_currentWrapper = X_NET_JSONPWrapper;\r
134                         break;\r
135                 case X_NET_TYPE_FORM :\r
136                         X_NET_currentWrapper = X_NET_FORMWrapper;\r
137                         break;\r
138         };\r
139         \r
140         X_NET_currentWrapper.listen( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.PROGRESS, X.Event.COMPLETE ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
141         \r
142         X_NET_currentWrapper.load( queue.data );\r
143 };\r
144 \r