OSDN Git Service

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