Skip to content

Commit 6fdfed1

Browse files
committed
Base64 decoder
1 parent cb547dc commit 6fdfed1

5 files changed

Lines changed: 85 additions & 6 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,5 @@ $RECYCLE.BIN/
103103
*.epd
104104

105105
#hello
106-
Data-sample/bgWork-app.xml
106+
Data-sample/bgWork-app.xml
107+
Data-sample/bgWork2-app.xml

Data-sample/bgWork.swf

-5.45 KB
Binary file not shown.

FLA/bgWork.fla

17 Bytes
Binary file not shown.

wrokersJob/BgWorker.as

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919
import flash.utils.getQualifiedClassName;
2020
import flash.utils.setTimeout;
2121

22+
import mx.utils.Base64Decoder;
23+
import mx.utils.Base64Encoder;
24+
2225
public class BgWorker extends MovieClip
2326
{
2427
public static const id_jsonParser:int = 1 ;
2528
public static const id_byteToBitmap:int = 2 ;
29+
public static const id_base64ToByte:int = 3 ;
2630

2731

2832
private var receiverChannel:MessageChannel;
@@ -56,6 +60,7 @@
5660
{
5761
receveidData = receiverChannel.receive() ;
5862
}
63+
var targetFile:File;
5964
//trace("Receved data on bgWorker is : "+receveidData);
6065
var callerId:uint = receveidData[1] ;
6166
var callerData:Object = receveidData[2] ;
@@ -68,6 +73,37 @@
6873
case id_jsonParser:
6974
createdData.push([JSON.parse(String(callerData))]);
7075
break ;
76+
case id_base64ToByte:
77+
if(callerData is String)
78+
{
79+
trace("*** File catched by worker : "+callerData);
80+
try
81+
{
82+
targetFile = new File(callerData as String);
83+
var fileStreamBase64:FileStream = new FileStream();
84+
trace("*** Read file ");
85+
fileStreamBase64.open(targetFile,FileMode.READ);
86+
var baseDecoder:Base64Decoder = new Base64Decoder();
87+
baseDecoder.decode(fileStreamBase64.readUTFBytes(fileStreamBase64.bytesAvailable));
88+
fileStreamBase64.close();
89+
trace("*** File loaded");
90+
createdData.push([baseDecoder.toByteArray()]);
91+
try
92+
{
93+
targetFile.deleteFile();
94+
}
95+
catch(e:Error){};
96+
}
97+
catch(e:Error)
98+
{
99+
createdData.push([e.message]);
100+
}
101+
}
102+
else
103+
{
104+
createdData.push([null]);
105+
}
106+
break ;
71107
case id_byteToBitmap:
72108
try
73109
{
@@ -99,7 +135,7 @@
99135
{
100136
fileLoader = new FileStream();
101137
trace("-fileTarget : "+fileTarget);
102-
var targetFile:File = new File(fileTarget);
138+
targetFile = new File(fileTarget);
103139
trace("-target file created");
104140
fileLoader.open(targetFile,FileMode.READ);
105141
byte = new ByteArray();

wrokersJob/WorkerFunctions.as

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import contents.alert.Alert;
44

55
import flash.events.Event;
6+
import flash.events.IOErrorEvent;
67
import flash.filesystem.File;
8+
import flash.filesystem.FileMode;
9+
import flash.filesystem.FileStream;
710
import flash.system.Capabilities;
811
import flash.system.MessageChannel;
912
import flash.system.Worker;
@@ -36,18 +39,21 @@
3639

3740
private static var activated:Boolean = false ;
3841

42+
3943
public static function setUp(TotalWorkers:uint = 4):void
4044
{
4145
activated = true ;
4246
totalWorkers = TotalWorkers ;
4347

44-
var workerTarget:File = File.applicationDirectory.resolvePath("Data/bgWork.swf");//new File("D://Sepehr//gitHub/sepehrEngine/SaffronEngine/Data-sample/bgWork.swf") ;
48+
var workerTarget:File = File.applicationDirectory.resolvePath("Data/bgWork2.swf");//new File("D://Sepehr//gitHub/sepehrEngine/SaffronEngine/Data-sample/bgWork.swf") ;
4549
if(!workerTarget.exists)
4650
{
4751
var moreHints:String = '';
4852
if(File.applicationDirectory.resolvePath("Data/bgWork").exists)
49-
moreHints += " and remove the Data/bgWork now. ";
50-
Alert.show("Add the bgWork file from Data-sample folder on Saffron to your Data folder"+moreHints) ;
53+
moreHints += " and remove the Data/bgWork now.\n";
54+
if(File.applicationDirectory.resolvePath("Data/bgWork.swf").exists)
55+
moreHints += " and remove the Data/bgWork.swf now.\n";
56+
Alert.show("Add the "+workerTarget.name+" file from Data-sample folder on Saffron to your Data folder"+moreHints) ;
5157
}
5258
var workerBytes:ByteArray = FileManager.loadFile(workerTarget);
5359

@@ -134,6 +140,39 @@
134140
}
135141
}
136142

143+
/**You will receive your byte array on the first unit of receiver array. so receiver must take an array*/
144+
public static function base64ToByte(base64String:String,receiver:Function):void
145+
{
146+
var currentId:uint = lastID++ ;
147+
148+
funcList.push(receiver);
149+
idList.push(currentId);
150+
151+
var tempFile:File = File.createTempFile() ;
152+
var fileStream:FileStream = new FileStream();
153+
fileStream.addEventListener(Event.CLOSE,fileSaved);
154+
fileStream.openAsync(tempFile,FileMode.WRITE);
155+
trace("** Save "+base64String.length+" to temp file targeted : "+tempFile.nativePath);
156+
fileStream.writeUTFBytes(base64String);
157+
fileStream.close();
158+
159+
function fileSaved(event:Event):void
160+
{
161+
trace("** File saved done!!");
162+
fileStream.close();
163+
var toSendValue:Array = [BgWorker.id_base64ToByte,currentId,tempFile.nativePath] ;
164+
165+
if(activated)
166+
{
167+
selectSenderTosend().send(toSendValue);
168+
}
169+
else
170+
{
171+
setUpDebugOnce();
172+
bgEmulator.handleCommandMessage(toSendValue);
173+
}
174+
}
175+
}
137176

138177
/**You will recevie your objec on your receiver function on the first unit of an Array.*/
139178
public static function JSONPars(str:String,receiver:Function):void
@@ -173,7 +212,10 @@
173212
received = receiverChannel.receive();
174213
}
175214
trace("Received data type is : "+getQualifiedClassName(received[1]));
176-
callFunction(received[0],received[1]);
215+
var callerId:uint = received[0] ;
216+
217+
218+
callFunction(callerId,received[1]);
177219
}
178220

179221
/**Send this data to its recever*/

0 commit comments

Comments
 (0)