root/as3/gunyarapaint/trunk/nicopedia/org/libspark/nicopedia/Com.as

リビジョン 1564, 7.9 kB (コミッタ: tasuku, コミット時期: 5 年 前)

oops, player cannot works well

Line 
1 package org.libspark.nicopedia
2 {
3   import com.adobe.serialization.json.JSON;
4   import com.adobe.serialization.json.JSONParseError;
5  
6   import flash.display.DisplayObject;
7  
8   import mx.core.UIComponent;
9   import mx.events.FlexEvent;
10  
11   public class Com extends UIComponent
12   {
13     import flash.events.Event;
14     import flash.events.IOErrorEvent;
15     import flash.events.ProgressEvent;
16     import flash.events.SecurityErrorEvent;
17     import flash.utils.ByteArray;
18     import flash.events.HTTPStatusEvent;
19     import flash.events.IEventDispatcher;
20     import flash.display.Loader;
21     import flash.net.*;
22    
23     import mx.controls.Alert;
24    
25     import mx.managers.PopUpManager;
26    
27     private const ALERT_TITLE:String = 'ニコニコ大百科伝言班';
28    
29     private var callback:Function;
30  
31     private var urlLoader:URLLoader;
32     private var loader:Loader;
33    
34     private var errorStr:String;
35    
36     private var _comDialog:ComDialog;
37
38     public function Com() {
39     }
40
41     // jasrac_idsはスペース区切りで
42     public function postPico(url:String, magic:String, cookie:String, name:String, title:String, msg:String, mml:String, ref_mml_id:uint, jasrac_ids:String, callback:Function):void {
43       var r:URLRequest = new URLRequest();
44       var v:URLVariables = new URLVariables();
45       r.url = url;
46       r.method = URLRequestMethod.POST;
47       r.data = v;
48       v.magic = magic;
49       v.FROM = name;
50       v.title = title;
51       v.MESSAGE = msg;
52       v.MML = mml;
53       v.ref_mml_id = ref_mml_id;
54       v.jasrac_ids = jasrac_ids;
55       v.cookie = cookie;
56      
57       this.callback = callback;     
58       post(r);
59     }
60    
61     public static function redirect(url:String):void {
62       var r:URLRequest = new URLRequest();
63       r.url = url;
64       r.method = URLRequestMethod.GET;
65       navigateToURL(r, '_top');
66     }
67    
68     public static function redirectPicoForm(url:String, mml_id:uint):void {
69       var r:URLRequest = new URLRequest();
70       var v:URLVariables = new URLVariables();
71       r.url = url;
72       r.data = v;
73       r.method = URLRequestMethod.POST;
74       v.mml_id = mml_id;
75      
76       navigateToURL(r, '_top');
77     }
78    
79     public static function redirectOekakiForm(url:String, oekaki_id:uint):void {
80       var r:URLRequest = new URLRequest();
81       var v:URLVariables = new URLVariables();
82       r.url = url;
83       r.data = v;
84       r.method = URLRequestMethod.POST;
85       v.oekaki_id = oekaki_id;
86      
87       navigateToURL(r, '_top');
88     }
89    
90     public function postOekaki(parent:DisplayObject, url:String, magic:String, cookie:String, name:String, msg:String, ref_oekaki_id:uint, data:Object, callback:Function):void {
91       try {
92         _comDialog = new ComDialog();
93         PopUpManager.addPopUp(_comDialog, parent, true);
94         _comDialog.cancelButton.addEventListener(FlexEvent.BUTTON_DOWN, cancelHandler);
95  
96         var r:URLRequest = new URLRequest();
97         var v:URLVariables = new URLVariables();
98         var b:ByteArray = new ByteArray();
99         var info:ByteArray = new ByteArray();
100         info.writeUTFBytes(JSON.encode(data['info']));
101         v.cookie = cookie;
102         v.magic = magic;
103         v.FROM = name;
104         v.MESSAGE = msg;
105         v.ref_oekaki_id = ref_oekaki_id;
106         v.log_count = data['info']['log_count']; // TODO: サーバ側で取り出してあげる
107         var form:String = v.toString();
108         b.writeUTFBytes(':' + form.length + '=' + form);
109         b.writeUTFBytes('&IMAGE:' + data['image'].length + '=');
110         b.writeBytes(data['image']);
111         b.writeUTFBytes('&IMAGE_LOG:' + data['compressed_log'].length + '=');
112         b.writeBytes(data['compressed_log']);
113         b.writeUTFBytes('&IMAGE_LAYERS:' + data['layers_image'].length + '=');
114         b.writeBytes(data['layers_image']);
115         b.writeUTFBytes('&IMAGE_INFO:' + info.length + '=');
116         b.writeBytes(info);
117         r.url = url;
118         r.method = URLRequestMethod.POST;
119         r.contentType = 'application/x-nicopedia-oekaki';
120         r.data = b;
121        
122         this.callback = callback;
123         post(r);
124       } catch (e:Error) {
125         errorStr = '投稿準備時にエラーが起こりました。ほかのアプリケーションを終了して空きメモリ容量を増やした上で、再度投稿してください。';
126         callback(this);
127       }
128     }
129    
130     public static function navigate(url:String, target:String):void {
131       var r:URLRequest = new URLRequest();
132       r.url = url;
133       r.method = URLRequestMethod.POST;
134       navigateToURL(r, target);
135     }
136    
137     public function sendGetUrlRequest(url:String, callback:Function):void {
138       var r:URLRequest = new URLRequest();
139       r.url = url;
140       r.method = URLRequestMethod.GET;
141       this.callback = callback;
142       post(r);
143     }
144    
145     private function post(request:URLRequest):void {
146       errorStr = null;
147       urlLoader = new URLLoader();
148       urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
149       configureListeners(urlLoader);
150       urlLoader.load(request);
151     }
152
153     // 画像の読み込み専用!
154     public function loadURL(url:String, callback:Function):void {
155       var r:URLRequest = new URLRequest;
156       r.url = url;
157       r.method = URLRequestMethod.GET;
158       loader = new Loader();
159       configureListeners(loader.contentLoaderInfo);
160       this.callback = callback;
161       loader.load(r);
162     }
163    
164     private function configureListeners(dispatcher:IEventDispatcher):void {
165       // dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, postHttpStatusHandler);
166       dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, postSecurityErrorHandler);
167       dispatcher.addEventListener(IOErrorEvent.IO_ERROR, postIOErrorHandler);
168       dispatcher.addEventListener(Event.OPEN, postOpenHandler);
169       dispatcher.addEventListener(ProgressEvent.PROGRESS, postProgressHandler);
170       dispatcher.addEventListener(Event.COMPLETE, postCompleteHandler);           
171     }
172    
173     private function postSecurityErrorHandler(evt:SecurityErrorEvent):void {
174       errorStr = 'セキュリティエラーが発生しました。通信が許可されていません。通常このエラーは起きません。\n詳細:' + evt.text;
175       postCompleteHandler(evt);
176     }
177     private function postIOErrorHandler(evt:IOErrorEvent):void {
178       // TODO: not event based, see URLLoader help
179       errorStr = 'ネットワークエラーが発生しました。混雑や一時的なメンテナンスの可能性がございます。お手数ですが、再度投稿お願いいたします。\n詳細:' + evt.text;
180       postCompleteHandler(evt);
181     }
182     private function postOpenHandler(evt:Event):void {
183     }
184     private function postProgressHandler(evt:ProgressEvent):void {
185       if (_comDialog) {
186         _comDialog.comProgressBar.setProgress(evt.bytesLoaded, evt.bytesTotal);
187       }
188     }
189    
190     private function cancelHandler(evt:Event):void {
191       try {
192         urlLoader.close();
193       } catch (e:Error) {}
194       errorStr = '投稿をキャンセルしました。すでに投稿がなされている場合もあります。';
195       postCompleteHandler(evt);
196     }
197     private function postCompleteHandler(evt:Event):void {
198       if (_comDialog) {
199         PopUpManager.removePopUp(_comDialog);
200         _comDialog = null;
201       }
202       callback(this);
203     }
204     public function get data():ByteArray {
205       return urlLoader.data;
206     }
207     public function get content():DisplayObject {
208       // for png to bitmap
209       return loader.content;
210     }
211     public function get jsonObject():Object {
212       if (urlLoader.data.toString != '') {
213         try {
214           return JSON.decode(urlLoader.data);         
215         } catch (e:JSONParseError) {
216         }
217       }
218       return null;
219     }
220     public function get errStr():String {
221       return errorStr;
222     }
223   }
224 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。