OSDN Git Service

Version 0.6.112, fix X.Node.Anime, rewite X.Audio.* for AudioSprite, add X.Audio...
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 00_XNet.js
1 // TODO  onlineevent offlineevent, netspeed\r
2 // local への通信に対しては、netspeed を更新しない\r
3 X.Net = {\r
4 \r
5         xhrGet : function( url, type ){\r
6                 return new X_NET_Queue( X_NET_TYPE_XHR, { method : 'GET', url : url, type : type } );\r
7         },\r
8         \r
9         xhrPost : function( url, postbody ){\r
10                 return new X_NET_Queue( X_NET_TYPE_XHR, { method : 'POST', url : url, postbody : postbody } );\r
11         },\r
12         \r
13         formGet : function(){\r
14                 \r
15         },\r
16         \r
17         formPost : function(){\r
18                 \r
19         },\r
20         \r
21         // TODO chashe\r
22         // TODO iframe useful or not.\r
23         // TODO file: では http: は使えない\r
24         jsonp : function( url, useIframe ){\r
25                 return new X_NET_Queue( X_NET_TYPE_JSONP, url );\r
26         },\r
27         \r
28         image : function( url, needSize, delay, timeout ){\r
29                 return new X_NET_Queue( X_NET_TYPE_IMAGE, { url : url, needSize : needSize } );\r
30         },\r
31         \r
32         // <script>, <link>\r
33         \r
34         amountQueue : function(){\r
35                 return X_NET_QUEUE_LIST.length;\r
36         }\r
37 \r
38 };\r
39 \r
40 /*\r
41  * @interface\r
42  */\r
43 var X_NET_IWrapper = function(){};\r
44         X_NET_IWrapper.prototype.load   = function(){};\r
45         X_NET_IWrapper.prototype.cancel = function(){};\r
46         X_NET_IWrapper.prototype.reset  = function(){};\r
47 \r
48 \r
49 var X_NET_TYPE_XHR   = 1,\r
50         X_NET_TYPE_JSONP = 2,\r
51         X_NET_TYPE_FORM  = 3,\r
52         X_NET_TYPE_IMAGE = 4,\r
53 \r
54         X_NET_QUEUE_LIST = [],\r
55 \r
56         X_NET_XHRWrapper,\r
57         X_NET_JSONPWrapper,\r
58         X_NET_FormWrapper,\r
59         X_NET_ImageWrapper,\r
60 \r
61         X_NET_currentWrapper,\r
62         X_NET_currentQueue,\r
63 \r
64         X_NET_Queue = X.EventDispatcher.inherits(\r
65                 'XNetQueue',\r
66                 X.Class.POOL_OBJECT,\r
67                 {\r
68                         type : 0,\r
69                         data : null,\r
70                         \r
71                         Constructor : function( type, data ){\r
72                                 this.type = type;\r
73                                 this.data = data;                               \r
74                                 \r
75                                 //this.listenOnce( X.Event.COMPLETE, X_NET_proxyDispatch );\r
76                                 X_EventDispatcher_systemListen( this, X.Event.COMPLETE, X_NET_proxyDispatch );\r
77                                 \r
78                                 X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;\r
79                                 !X_NET_currentQueue && X_NET_shiftQueue();\r
80                         },\r
81                         \r
82                         busy : function(){\r
83                                 return this === X_NET_currentQueue && X_NET_currentWrapper._busy;\r
84                         },\r
85                         \r
86                         cancel : function(){\r
87                                 var i = X_NET_QUEUE_LIST.indexOf( this );\r
88                                 if( i !== -1 ){\r
89                                         X_NET_QUEUE_LIST.splice( i, 1 );\r
90                                         this.asyncDispatch( X.Event.CANCELED );\r
91                                         this.asyncDispatch( 16, X.Event.COMPLETE );\r
92                                 } else\r
93                                 if( this === X_NET_currentQueue ){\r
94                                         X_NET_currentWrapper.cancel();\r
95                                 };\r
96                         }\r
97                 }\r
98         );\r
99 \r
100 function X_NET_proxyDispatch( e ){\r
101         switch( e.type ){\r
102                 case X.Event.BEFORE_KILL_INSTANCE :\r
103                         break;\r
104                 case X.Event.KILL_INSTANCE :\r
105                         break;                  \r
106                 case X.Event.KILL_INSTANCE_CANCELED :\r
107                         break;\r
108                 case X.Event.PROGRESS :\r
109                         this.dispatch( e );\r
110                         break;\r
111                 case X.Event.SUCCESS :\r
112                 case X.Event.ERROR :\r
113                 case X.Event.TIMEOUT :\r
114                 case X.Event.CANCELED :\r
115                         this.dispatch( e );\r
116                         this.asyncDispatch( X.Event.COMPLETE );\r
117                         break;\r
118                 case X.Event.COMPLETE :\r
119                         this.kill();\r
120                         X_NET_shiftQueue();\r
121                         break;\r
122         };\r
123 };\r
124 \r
125 function X_NET_shiftQueue(){\r
126         var queue;\r
127         \r
128         if( X_NET_currentQueue ){\r
129                 console.log( 'X_NET_shiftQueue ' + X_NET_currentWrapper._busy );\r
130                 if( X_NET_currentWrapper._busy ) return;\r
131                 X_NET_currentWrapper\r
132                         .unlisten( [ X.Event.PROGRESS, X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ], X_NET_currentQueue, X_NET_proxyDispatch )\r
133                         .reset();\r
134                 X_NET_currentQueue = X_NET_currentWrapper = null;\r
135         };\r
136         \r
137         if( !X_NET_QUEUE_LIST.length ) return;\r
138 \r
139         queue = X_NET_QUEUE_LIST.shift();\r
140         \r
141         switch( queue.type ){\r
142                 case X_NET_TYPE_XHR :\r
143                         X_NET_currentWrapper = X_NET_XHRWrapper;\r
144                         break;\r
145                 case X_NET_TYPE_JSONP :\r
146                         X_NET_currentWrapper = X_NET_JSONPWrapper;\r
147                         break;\r
148                 case X_NET_TYPE_FORM :\r
149                         X_NET_currentWrapper = X_NET_FormWrapper;\r
150                         break;\r
151                 case X_NET_TYPE_IMAGE :\r
152                         X_NET_currentWrapper = X_NET_ImageWrapper;\r
153                         break;\r
154         };\r
155         \r
156         X_NET_currentWrapper.listen( [ X.Event.PROGRESS, X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ], X_NET_currentQueue = queue, X_NET_proxyDispatch );\r
157         \r
158         X_NET_currentWrapper.load( queue.data );\r
159 };\r
160 \r