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

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

r53@poppop (orig r52): tasuku | 2008-05-06 04:36:34 +0900
お絵かきの続きを書くボタンの追加

Line 
1 package gunyarapaint
2 {
3   import flash.display.DisplayObject;
4  
5   import mx.core.UIComponent;
6  
7   public class Com extends UIComponent
8   {
9     import flash.events.Event;
10     import flash.events.IOErrorEvent;
11     import flash.events.ProgressEvent;
12     import flash.events.SecurityErrorEvent;
13     import flash.utils.ByteArray;
14     import flash.events.HTTPStatusEvent;
15     import flash.events.IEventDispatcher;
16     import flash.display.Loader;
17     import flash.net.*;
18    
19     import mx.controls.Alert;
20    
21     import mx.managers.PopUpManager;
22    
23     private const ALERT_TITLE:String = 'ニコニコ大百科伝言班';
24    
25     private var postUrl:String;
26     private var cookie:String;
27     private var magic:String;
28  
29     private var urlLoader:URLLoader;
30     private var loader:Loader;
31    
32     private var errorStr:String;
33
34     public function Com() {
35     }
36
37     public function setPostEnv(postUrl:String, cookie:String, magic:String):void {
38       this.postUrl = postUrl;
39       this.cookie = cookie;
40       this.magic = magic;
41     }
42    
43     public function postPico(name:String, msg:String, mml:String, ref_mml_id:uint):void {
44       var r:URLRequest = new URLRequest();
45       var v:URLVariables = new URLVariables();
46       r.url = postUrl;
47       r.method = URLRequestMethod.POST;
48       r.data = v;
49       v.magic = magic;
50       v.FROM = name;
51       v.MESSAGE = msg;
52       v.MML = mml;
53       v.ref_mml_id = ref_mml_id;
54       v.cookie = cookie;
55      
56       post(r);
57     }
58    
59     public static function redirect(url:String):void {
60       var r:URLRequest = new URLRequest();
61       r.url = url;
62       r.method = URLRequestMethod.GET;
63       navigateToURL(r, '_top');
64     }
65    
66     public static function redirectPicoForm(url:String, mml_id:uint):void {
67       var r:URLRequest = new URLRequest();
68       var v:URLVariables = new URLVariables();
69       r.url = url;
70       r.data = v;
71       r.method = URLRequestMethod.POST;
72       v.mml_id = mml_id;
73      
74       navigateToURL(r, '_top');
75     }
76    
77     public static function redirectOekakiForm(url:String, oekaki_id:uint):void {
78       var r:URLRequest = new URLRequest();
79       var v:URLVariables = new URLVariables();
80       r.url = url;
81       r.data = v;
82       r.method = URLRequestMethod.POST;
83       v.oekaki_id = oekaki_id;
84      
85       navigateToURL(r, '_top');
86     }
87    
88     public function postOekaki(name:String, msg:String,
89                                  image:ByteArray, log:ByteArray, ref_oekaki_id:uint):void {
90       var r:URLRequest = new URLRequest();
91       var v:URLVariables = new URLVariables();
92       var b:ByteArray = new ByteArray();
93      
94       v.cookie = cookie;
95       v.magic = magic;
96       v.FROM = name;
97       v.MESSAGE = msg;
98       v.ref_oekaki_id = ref_oekaki_id;
99       var form:String = v.toString();
100       b.writeUTFBytes(':' + form.length + '=' + form);
101       b.writeUTFBytes('&IMAGE:' + image.length + '=');
102       b.writeBytes(image);
103       b.writeUTFBytes('&IMAGE_LOG:' + log.length + '=');
104       b.writeBytes(log);
105       r.url = postUrl;
106       r.method = URLRequestMethod.POST;   
107       r.contentType = 'application/x-nicopedia-oekaki';
108       r.data = b;
109      
110       post(r);
111     }
112    
113     public static function navigate(url:String, target:String):void {
114       var r:URLRequest = new URLRequest();
115       r.url = url;
116       r.method = URLRequestMethod.POST;
117       navigateToURL(r, target);
118     }
119    
120     public function sendGetUrlRequest(url:String):void {
121       var r:URLRequest = new URLRequest();
122       r.url = url;
123       r.method = URLRequestMethod.GET;
124       post(r);
125     }
126    
127     private function post(request:URLRequest):void {
128       errorStr = null;
129       urlLoader = new URLLoader();
130       urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
131       configureListeners(urlLoader);
132       urlLoader.load(request);
133     }
134
135     public function loadUrl(url:String):void {
136       var r:URLRequest = new URLRequest();
137       r.url = url;
138       r.method = URLRequestMethod.GET;
139       load(r);
140     }
141
142     public function load(request:URLRequest):void {
143       loader = new Loader();
144       configureListeners(loader.contentLoaderInfo);
145       loader.load(request);
146     }
147    
148     private function configureListeners(dispatcher:IEventDispatcher):void {
149       // dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, postHttpStatusHandler);
150       dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, postSecurityErrorHandler);
151       dispatcher.addEventListener(IOErrorEvent.IO_ERROR, postIOErrorHandler);
152       dispatcher.addEventListener(Event.OPEN, postOpenHandler);
153       dispatcher.addEventListener(ProgressEvent.PROGRESS, postProgressHandler);
154       dispatcher.addEventListener(Event.COMPLETE, postCompleteHandler);           
155     }
156    
157     private function postSecurityErrorHandler(evt:SecurityErrorEvent):void {
158       errorStr = 'セキュリティエラーが発生しました。\n詳細:' + evt.text;
159       dispatchEvent(new Event('completeGetData'));
160     }
161     private function postIOErrorHandler(evt:IOErrorEvent):void {
162       // TODO: not event based, see URLLoader help
163       errorStr = 'ネットワークエラーが発生しました。\n詳細:' + evt.text;
164       dispatchEvent(new Event('completeGetData'));
165     }
166     private function postOpenHandler(evt:Event):void {
167     }
168     private function postProgressHandler(evt:ProgressEvent):void {
169       evt.bytesLoaded + evt.bytesTotal;
170     }
171     private function postCompleteHandler(evt:Event):void {
172       dispatchEvent(new Event('completeGetData'));
173     }
174     public function getData():ByteArray {
175       return urlLoader.data;
176     }
177     public function getStringData():String {
178       return urlLoader.data.toString();
179     }
180     public function getContent():DisplayObject {
181       return loader.content;
182     }
183     public function getErrorStr():String {
184       return errorStr;
185     }
186   }
187 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。