diff --git a/externals/vegas/LICENSE b/externals/vegas/LICENSE new file mode 100644 index 0000000000..0c5ecafa21 --- /dev/null +++ b/externals/vegas/LICENSE @@ -0,0 +1,581 @@ +Mozilla Public License 1.1 (MPL 1.1) + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or + otherwise making the Covered Code available to a third + party. + + 1.1. ''Contributor'' means each entity that creates or + contributes to the creation of Modifications. + + 1.2. ''Contributor Version'' means the combination of + the Original Code, prior Modifications used by + a Contributor, and the Modifications made by that + particular Contributor. + + 1.3. ''Covered Code'' means the Original Code or + Modifications or the combination of the Original Code + and Modifications, in each case including portions + thereof. + + 1.4. ''Electronic Distribution Mechanism'' means a + mechanism generally accepted in the software + development community for the electronic transfer of + data. + + 1.5. ''Executable'' means Covered Code in any form + other than Source Code. + + 1.6. ''Initial Developer'' means the individual or + entity identified as the Initial Developer in the + Source Code notice required by Exhibit A. + + 1.7. ''Larger Work'' means a work which combines + Covered Code or portions thereof with code not + governed by the terms of this License. + + 1.8. ''License'' means this document. + + 1.8.1. "Licensable" means having the right to grant, + to the maximum extent possible, whether at the time of + the initial grant or subsequently acquired, any and + all of the rights conveyed herein. + + 1.9. ''Modifications'' means any addition to or + deletion from the substance or structure of either the + Original Code or any previous Modifications. When + Covered Code is released as a series of files, a + Modification is: + + A. Any addition to or deletion from the contents + of a file containing Original Code or previous + Modifications. + + B. Any new file that contains any part of the + Original Code or previous Modifications. + + 1.10. ''Original Code'' means Source Code of computer + software code which is described in the Source Code + notice required by Exhibit A as Original Code, and + which, at the time of its release under this License + is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now + owned or hereafter acquired, including without + limitation, method, process, and apparatus claims, in + any patent Licensable by grantor. + + 1.11. ''Source Code'' means the preferred form of the + Covered Code for making modifications to it, including + all modules it contains, plus any associated interface + definition files, scripts used to control compilation + and installation of an Executable, or source code + differential comparisons against either the Original + Code or another well known, available Covered Code of + the Contributor's choice. The Source Code can be in a + compressed or archival form, provided the appropriate + decompression or de-archiving software is widely + available for no charge. + + 1.12. "You'' (or "Your") means an individual or a + legal entity exercising rights under, and complying + with all of the terms of, this License or a future + version of this License issued under Section 6.1. For + legal entities, "You'' includes any entity which + controls, is controlled by, or is under common control + with You. For purposes of this definition, "control'' + means (a) the power, direct or indirect, to cause the + direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or + beneficial ownership of such entity. + + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, + royalty-free, non-exclusive license, subject to third + party intellectual property claims: + (a) under intellectual property rights (other + than patent or trademark) Licensable by Initial + Developer to use, reproduce, modify, display, + perform, sublicense and distribute the Original + Code (or portions thereof) with or without + Modifications, and/or as part of a Larger Work; + and + + (b) under Patents Claims infringed by the making, + using or selling of Original Code, to make, have + made, use, practice, sell, and offer for sale, + and/or otherwise dispose of the Original Code (or + portions thereof). + + (c) the licenses granted in this Section 2.1(a) + and (b) are effective on the date Initial + Developer first distributes Original Code under + the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no + patent license is granted: 1) for code that You + delete from the Original Code; 2) separate from + the Original Code; or 3) for infringements + caused by: i) the modification of the Original + Code or ii) the combination of the Original Code + with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, + each Contributor hereby grants You a world-wide, + royalty-free, non-exclusive license + + (a) under intellectual property rights (other + than patent or trademark) Licensable by + Contributor, to use, reproduce, modify, display, + perform, sublicense and distribute the + Modifications created by such Contributor (or + portions thereof) either on an unmodified basis, + with other Modifications, as Covered Code and/or + as part of a Larger Work; + and + + (b) under Patent Claims infringed by the making, + using, or selling of Modifications made by that + Contributor either alone and/or in combination + with its Contributor Version (or portions of such + combination), to make, use, sell, offer for sale, + have made, and/or otherwise dispose of: 1) + Modifications made by that Contributor (or + portions thereof); and 2) the combination of + Modifications made by that Contributor with its + Contributor Version (or portions of such + combination). + + (c) the licenses granted in Sections 2.2(a) and + 2.2(b) are effective on the date Contributor + first makes Commercial Use of the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no + patent license is granted: 1) for any code that + Contributor has deleted from the Contributor + Version; 2) separate from the Contributor + Version; 3) for infringements caused by: i) + third party modifications of Contributor Version + or ii) the combination of Modifications made by + that Contributor with other software (except as + part of the Contributor Version) or other + devices; or 4) under Patent Claims infringed by + Covered Code in the absence of Modifications made + by that Contributor. + + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You + contribute are governed by the terms of this License, + including without limitation Section 2.2. The Source + Code version of Covered Code may be distributed only + under the terms of this License or a future version of + this License released under Section 6.1, and You must + include a copy of this License with every copy of the + Source Code You distribute. You may not offer or + impose any terms on any Source Code version that + alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, + You may include an additional document offering the + additional rights described in Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You + contribute must be made available in Source Code form + under the terms of this License either on the same + media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom + you made an Executable version available; and if made + available via Electronic Distribution Mechanism, must + remain available for at least twelve (12) months after + the date it initially became available, or at least + six (6) months after a subsequent version of that + particular Modification has been made available to + such recipients. You are responsible for ensuring that + the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a + third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You + contribute to contain a file documenting the changes + You made to create that Covered Code and the date of + any change. You must include a prominent statement + that the Modification is derived, directly or + indirectly, from Original Code provided by the Initial + Developer and including the name of the Initial + Developer in (a) the Source Code, and (b) in any + notice in an Executable version or related + documentation in which You describe the origin or + ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under + a third party's intellectual property rights is + required to exercise the rights granted by such + Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the + Source Code distribution titled "LEGAL'' which + describes the claim and the party making the + claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such + knowledge after the Modification is made + available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file + in all copies Contributor makes available + thereafter and shall take other steps (such as + notifying appropriate mailing lists or + newsgroups) reasonably calculated to inform those + who received the Covered Code that new knowledge + has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an + application programming interface and Contributor + has knowledge of patent licenses which are + reasonably necessary to implement that API, + Contributor must also include this information in + the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed + pursuant to Section 3.4(a) above, Contributor + believes that Contributor's Modifications are + Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the + rights conveyed by this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each + file of the Source Code. If it is not possible to put + such notice in a particular Source Code file due to + its structure, then You must include such notice in a + location (such as a relevant directory) where a user + would be likely to look for such a notice. If You + created one or more Modification(s) You may add your + name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in + any documentation for the Source Code where You + describe recipients' rights or ownership rights + relating to Covered Code. You may choose to offer, + and to charge a fee for, warranty, support, indemnity + or liability obligations to one or more recipients of + Covered Code. However, You may do so only on Your own + behalf, and not on behalf of the Initial Developer or + any Contributor. You must make it absolutely clear + than any such warranty, support, indemnity or + liability obligation is offered by You alone, and You + hereby agree to indemnify the Initial Developer and + every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of + warranty, support, indemnity or liability terms You + offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form + only if the requirements of Section 3.1-3.5 have been + met for that Covered Code, and if You include a notice + stating that the Source Code version of the Covered + Code is available under the terms of this License, + including a description of how and where You have + fulfilled the obligations of Section 3.2. The notice + must be conspicuously included in any notice in an + Executable version, related documentation or + collateral in which You describe recipients' rights + relating to the Covered Code. You may distribute the + Executable version of Covered Code or ownership rights + under a license of Your choice, which may contain + terms different from this License, provided that You + are in compliance with the terms of this License and + that the license for the Executable version does not + attempt to limit or alter the recipient's rights in + the Source Code version from the rights set forth in + this License. If You distribute the Executable version + under a different license You must make it absolutely + clear that any terms which differ from this License + are offered by You alone, not by the Initial Developer + or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any + liability incurred by the Initial Developer or such + Contributor as a result of any such terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code + with other code not governed by the terms of this + License and distribute the Larger Work as a single + product. In such a case, You must make sure the + requirements of this License are fulfilled for the + Covered Code. + + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the + terms of this License with respect to some or all of + the Covered Code due to statute, judicial order, or + regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. + Such description must be included in the LEGAL file + described in Section 3.4 and must be included with all + distributions of the Source Code. Except to the extent + prohibited by statute or regulation, such description + must be sufficiently detailed for a recipient of + ordinary skill to be able to understand it. + + +5. Application of this License. + + This License applies to code to which the Initial + Developer has attached the notice in Exhibit A and to + related Covered Code. + + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation (''Netscape'') may + publish revised and/or new versions of the License + from time to time. Each version will be given a + distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a + particular version of the License, You may always + continue to use it under the terms of that version. + You may also choose to use such Covered Code under the + terms of any subsequent version of the License + published by Netscape. No one other than Netscape has + the right to modify the terms applicable to Covered + Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this + License (which you may only do in order to apply it to + code which is not already Covered Code governed by + this License), You must (a) rename Your license so + that the phrases ''Mozilla'', ''MOZILLAPL'', + ''MOZPL'', ''Netscape'', "MPL", ''NPL'' or any + confusingly similar phrase do not appear in your + license (except to note that your license differs from + this License) and (b) otherwise make it clear that + Your version of the license contains terms which + differ from the Mozilla Public License and Netscape + Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice + described in Exhibit A shall not of themselves be + deemed to be modifications of this License.) + + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS + IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER + EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, + WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, + MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON- + INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND + PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD + ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU + (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) + ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR + CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN + ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED + CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS + DISCLAIMER. + + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder + will terminate automatically if You fail to comply + with terms herein and fail to cure such breach within + 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly + granted shall survive any termination of this License. + Provisions which, by their nature, must remain in + effect beyond the termination of this License shall + survive. + + 8.2. If You initiate litigation by asserting a patent + infringement claim (excluding declatory judgment + actions) against Initial Developer or a Contributor + (the Initial Developer or Contributor against whom You + file such action is referred to as "Participant") + alleging that: + + (a) such Participant's Contributor Version directly + or indirectly infringes any patent, then any and all + rights granted by such Participant to You under + Sections 2.1 and/or 2.2 of this License shall, upon 60 + days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You + either: (i) agree in writing to pay Participant a + mutually agreeable reasonable royalty for Your past + and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim + with respect to the Contributor Version against such + Participant. If within 60 days of notice, a + reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the + litigation claim is not withdrawn, the rights granted + by Participant to You under Sections 2.1 and/or 2.2 + automatically terminate at the expiration of the 60 + day notice period specified above. + + (b) any software, hardware, or device, other than + such Participant's Contributor Version, directly or + indirectly infringes any patent, then any rights + granted to You by such Participant under Sections 2.1 + (b) and 2.2(b) are revoked effective as of the date + You first made, used, sold, distributed, or had made, + Modifications made by that Participant. + + 8.3. If You assert a patent infringement claim + against Participant alleging that such Participant's + Contributor Version directly or indirectly infringes + any patent where such claim is resolved (such as by + license or settlement) prior to the initiation of + patent infringement litigation, then the reasonable + value of the licenses granted by such Participant + under Sections 2.1 or 2.2 shall be taken into account + in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 + or 8.2 above, all end user license agreements + (excluding distributors and resellers) which have been + validly granted by You or any distributor hereunder + prior to termination shall survive termination. + + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, + WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR + OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER + CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR + ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY + PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR + CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, + WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK + STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND + ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH + PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF + SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT + APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT + APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME + JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION + OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS + EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a ''commercial item,'' as that + term is defined in 48 C.F.R. 2.101 (Oct. 1995), + consisting of ''commercial computer software'' and + ''commercial computer software documentation,'' as + such terms are used in 48 C.F.R. 12.212 (Sept. 1995). + Consistent with 48 C.F.R. 12.212 and 48 C.F.R. + 227.7202-1 through 227.7202-4 (June 1995), all U.S. + Government End Users acquire Covered Code with only + those rights set forth herein. + + +11. MISCELLANEOUS. + + This License represents the complete agreement + concerning subject matter hereof. If any provision of + this License is held to be unenforceable, such + provision shall be reformed only to the extent + necessary to make it enforceable. This License shall + be governed by California law provisions (except to + the extent applicable law, if any, provides + otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party + is a citizen of, or an entity chartered or registered + to do business in the United States of America, any + litigation relating to this License shall be subject + to the jurisdiction of the Federal Courts of the + Northern District of California, with venue lying in + Santa Clara County, California, with the losing party + responsible for costs, including without limitation, + court costs and reasonable attorneys' fees and + expenses. The application of the United Nations + Convention on Contracts for the International Sale of + Goods is expressly excluded. Any law or regulation + which provides that the language of a contract shall + be construed against the drafter shall not apply to + this License. + + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, + each party is responsible for claims and damages + arising, directly or indirectly, out of its + utilization of rights under this License and You agree + to work with Initial Developer and Contributors to + distribute such responsibility on an equitable basis. + Nothing herein is intended or shall be deemed to + constitute any admission of liability. + + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the + Covered Code as Multiple-Licensed. Multiple-Licensed + means that the Initial Developer permits you to + utilize portions of the Covered Code under Your choice + of the NPL or the alternative licenses, if any, + specified by the Initial Developer in the file + described in Exhibit A. + + + +EXHIBIT A - Mozilla Public License. + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is + ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms of + the _____ license (the [___] License), in which case the provisions of + [______] License are applicable instead of those above. If you wish to + allow use of your version of this file only under the terms of the [____] + License and not to allow others to use your version of this file under + the MPL, indicate your decision by deleting the provisions above and + replace them with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient may use + your version of this file under either the MPL or the [___] License. + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should use + the text of this Exhibit A rather than the text found in the Original Code + Source Code for Your Modifications.] + diff --git a/externals/vegas/README b/externals/vegas/README new file mode 100644 index 0000000000..1e7a2b7099 --- /dev/null +++ b/externals/vegas/README @@ -0,0 +1,29 @@ +VEGAS AS3 - version 1.8.5.2228 + +The "vegas.swc" library contains all the AS3 source code of the VEGAS project with all this extensions. + +LICENCE + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + +PROJECT PAGES + + * http://code.google.com/p/vegas/ + +DOCUMENTATION & CO + + * http://code.google.com/p/vegas/ (tutorials and install) + * http://code.google.com/p/vegas/issues/list (issues) + * http://www.ekameleon.net/vegas/docs + + * http://www.ekameleon.net/blog/ (french blog) + +ABOUT AUTHOR + + * Author : ALCARAZ Marc (eKameleon) + * Link : http://www.ekameleon.net/blog + * Mail : ekameleon@gmail.com + +NOTES + +The vegas.swc file target now the FlashPlayer 10.2 and build with the Flex SDK 4.5.0.19786. \ No newline at end of file diff --git a/externals/vegas/src/system/Serializer.as b/externals/vegas/src/system/Serializer.as new file mode 100644 index 0000000000..afeb63dfcb --- /dev/null +++ b/externals/vegas/src/system/Serializer.as @@ -0,0 +1,86 @@ +/* + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the + License. + + The Original Code is [maashaack framework]. + + The Initial Developers of the Original Code are + Zwetan Kjukov and Marc Alcaraz . + Portions created by the Initial Developers are Copyright (C) 2006-2011 + the Initial Developers. All Rights Reserved. + + Contributor(s): + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the LGPL or the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. +*/ + +package system +{ + + /** + * Defines what a Serializer have to implements to be integrated in the framework. + *

Note : Every serializers (eden, json, wddx, etc.) should implement it.

+ */ + public interface Serializer + { + /** + * The prettyIndent value of the serializer. + */ + function get prettyIndent():int; + + /** + * @private + */ + function set prettyIndent( value:int ):void; + + /** + * The prettyPrinting value of the serializer. + */ + function get prettyPrinting():Boolean; + + /** + * @private + */ + function set prettyPrinting( value:Boolean ):void; + + /** + * The identor String value of the serializer. + */ + function get indentor():String; + + /** + * @private + */ + function set indentor( value:String ):void; + + /** + * Deserialize the specified String source representation. + */ + function deserialize( source:String ):*; + + /** + * Serialize the specified object. + */ + function serialize( value:* ):String; + } +} + diff --git a/externals/vegas/src/vegas/strings/JSON.as b/externals/vegas/src/vegas/strings/JSON.as new file mode 100644 index 0000000000..8dcb4ff95f --- /dev/null +++ b/externals/vegas/src/vegas/strings/JSON.as @@ -0,0 +1,107 @@ +/* + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is VEGAS Framework. + + The Initial Developer of the Original Code is + ALCARAZ Marc (aka eKameleon) . + Portions created by the Initial Developer are Copyright (C) 2004-2011 + the Initial Developer. All Rights Reserved. + + Contributor(s) : + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the LGPL or the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. + +*/ +package vegas.strings +{ + import vegas.strings.json.JSONSerializer; + + /** + * JSON (JavaScript object Notation) is a lightweight data-interchange format. + *

More information in the official site : http://www.JSON.org

+ *

Add Hexa Digits tool in deserialize method - eden inspiration

+ * + * @example Example + * + * + * import core.getClassName ; + * + * import vegas.strings.JSON; + * import vegas.strings.errors.JSONError; + * + * // --- Init + * + * var a:Array = [2, true, "hello"] ; + * var o:Object = { prop1 : 1 , prop2 : 2 } ; + * var s:String = "hello world" ; + * var n:Number = 4 ; + * var b:Boolean = true ; + * + * trace("# Serialize \r") ; + * + * trace("- a : " + JSON.serialize( a ) ) ; + * trace("- o : " + JSON.serialize( o ) ) ; + * trace("- s : " + JSON.serialize( s ) ) ; + * trace("- n : " + JSON.serialize( n ) ) ; + * trace("- b : " + JSON.serialize( b ) ) ; + * + * trace ("\r# Deserialize \r") ; + * + * var source:String = '[ { "prop1" : 0xFF0000 , prop2:2, prop3:"hello", prop4:true} , 2, true, 3, [3, 2] ]' ; + * + * o = JSON.deserialize(source) ; + * + * var l:uint = o.length ; + * for (var i:uint = 0 ; i < l ; i++) + * { + * trace("> " + i + " : " + o[i] + " -> typeof :: " + typeof(o[i])) ; + * if (typeof(o[i]) == "object") + * { + * for (var each:String in o[i]) + * { + * trace(" > " + each + " : " + o[i][each] + " :: " + getClassName(o[i][each]) ) ; + * } + * } + * } + * + * trace ("\r# JSONError \r") ; + * + * source = "[3, 2," ; // test1 + * + * // var source:String = '{"prop1":coucou"}' ; // test2 + * + * try + * { + * var errorObj:Object = JSON.deserialize(source) ; + * } + * catch( e:JSONError ) + * { + * trace( e.toString() ) ; + * } + * + * + */ + public var JSON:JSONSerializer = new JSONSerializer() ; +} \ No newline at end of file diff --git a/externals/vegas/src/vegas/strings/json/JSONError.as b/externals/vegas/src/vegas/strings/json/JSONError.as new file mode 100644 index 0000000000..0e1b20dfaf --- /dev/null +++ b/externals/vegas/src/vegas/strings/json/JSONError.as @@ -0,0 +1,84 @@ +/* + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is VEGAS Framework. + + The Initial Developer of the Original Code is + ALCARAZ Marc (aka eKameleon) . + Portions created by the Initial Developer are Copyright (C) 2004-2011 + the Initial Developer. All Rights Reserved. + + Contributor(s) : + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the LGPL or the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. + +*/ + +package vegas.strings.json +{ + /** + * This JSONError is throw in the JSON static methods. + */ + public class JSONError extends Error + { + /** + * Creates a new JSONError instance. + */ + public function JSONError( message:String, at:uint, source:String , id:int=0 ) + { + super( message , id ); + name = "JSONError" ; + this.at = at ; + this.source = source ; + } + + /** + * The position of char with an error parsing in the JSON String representation. + */ + public var at:uint ; + + /** + * The source ot the bad parsing. + */ + public var source:String ; + + /** + * Returns a String representation of the object. + * @return a String representation of the object. + */ + public function toString():String + { + var msg:String = "## " + name + " : " + message + " ##" ; + if (!isNaN(at)) + { + msg += ", at:" + at ; + } + if ( source != null ) + { + msg += " in \"" + source + "\""; + } + return msg ; + } + } +} \ No newline at end of file diff --git a/externals/vegas/src/vegas/strings/json/JSONSerializer.as b/externals/vegas/src/vegas/strings/json/JSONSerializer.as new file mode 100644 index 0000000000..5da0afe267 --- /dev/null +++ b/externals/vegas/src/vegas/strings/json/JSONSerializer.as @@ -0,0 +1,757 @@ +/* + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is VEGAS Framework. + + The Initial Developer of the Original Code is + ALCARAZ Marc (aka eKameleon) . + Portions created by the Initial Developer are Copyright (C) 2004-2011 + the Initial Developer. All Rights Reserved. + + Contributor(s) : + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the LGPL or the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. + +*/ + +package vegas.strings.json +{ + import system.Serializer; + + /** + * This class is the concrete class of the JSON singleton. + * JSON (JavaScript object Notation) is a lightweight data-interchange format. + *

More information in the official site : http://www.JSON.org

+ *

Add Hexa Digits tool in deserialize method - eden inspiration

+ *

Example :

+ *
+     * import core.getClassName ;
+     * 
+     * import vegas.strings.JSON;
+     * import vegas.strings.JSONError;
+     * 
+     * // --- Init
+     * 
+     * var a:Array   = [2, true, "hello"] ;
+     * var o:Object  = { prop1 : 1 , prop2 : 2 } ;
+     * var s:String  = "hello world" ;
+     * var n:Number  = 4 ;
+     * var b:Boolean = true ;
+     * 
+     * trace("Serialize") ;
+     * 
+     * trace("- a : " + JSON.serialize( a ) )  ;
+     * trace("- o : " + JSON.serialize( o ) )  ;
+     * trace("- s : " + JSON.serialize( s ) )  ;
+     * trace("- n : " + JSON.serialize( n ) )  ;
+     * trace("- b : " + JSON.serialize( b ) )  ;
+     * 
+     * trace ("Deserialize") ;
+     * 
+     * var source:String = '[ { "prop1" : 0xFF0000 , prop2:2, prop3:"hello", prop4:true} , 2, true, 3, [3, 2] ]' ;
+     * 
+     * o = JSON.deserialize(source) ;
+     * 
+     * var l:uint = o.length ;
+     * for (var i:uint = 0 ; i < l ; i++)
+     * {
+     *     trace("- " + i + " : " + o[i] + " , typeof :: " + typeof(o[i])) ;
+     *     if (typeof(o[i]) == "object")
+     *     {
+     *         for (var each:String in o[i])
+     *         {
+     *             trace("    + " + each + " : " + o[i][each] + " :: " + getClassName(o[i][each]) ) ;
+     *         }
+     *     }
+     * }
+     * 
+     * trace ("JSONError") ;
+     * 
+     * source = "[3, 2," ; // test1
+     * 
+     * // var source:String = '{"prop1":coucou"}' ; // test2
+     * 
+     * try
+     * {
+     *    var errorObj:Object = JSON.deserialize(source) ;
+     * }
+     * catch( e:JSONError )
+     * {
+     *     trace( e.toString() ) ;
+     * }
+     * 
+ */ + public class JSONSerializer implements Serializer + { + /** + * Creates a new JSONSerializer instance. + */ + public function JSONSerializer() + { + // + } + + /** + * The source to evaluate. + */ + public var source:String ; + + /** + * Indicates the indentor string representation. + */ + public function get indentor():String + { + return _indentor; + } + + /** + * @private + */ + public function set indentor(value:String):void + { + _indentor = value; + } + + /** + * Indicates the pretty indent value. + */ + public function get prettyIndent():int + { + return _prettyIndent; + } + + /** + * @private + */ + public function set prettyIndent(value:int):void + { + _prettyIndent = value ; + } + + /** + * Indicates the pretty printing flag value. + */ + public function get prettyPrinting():Boolean + { + return _prettyPrinting ; + } + + /** + * @private + */ + public function set prettyPrinting(value:Boolean):void + { + _prettyPrinting = value; + } + + /** + * Parse a string and interpret the source code to the correct object construct. + *

Example :

+ *
+         * "hello world" --> "hello world"
+         * "0xFF"        --> 255
+         * "{a:1,"b":2}" --> {a:1,b:2}
+         * 
+ * @return a string representing the data. + */ + public function deserialize( source:String ):* + { + this.source = source ; + at = 0 ; + ch = ' ' ; + return value() ; + } + + /** + * Serialize the specified value object passed-in argument. + */ + public function serialize( value:* ):String + { + var c:String ; // char + var i:int ; + var l:int ; + var s:String = '' ; + var v:* ; + var tof:String = typeof(value) ; + switch (tof) + { + case 'object' : + { + if (value) + { + if (value is Array) + { + l = (value as Array).length ; + for (i = 0 ; i < l ; ++i) + { + v = serialize(value[i]); + if (s) s += ',' ; + s += v ; + } + return '[' + s + ']'; + } + else if ( typeof( value.toString ) != 'undefined') + { + for (var prop:String in value) + { + v = value[prop]; + if ( (typeof(v) != 'undefined') && (typeof(v) != 'function') ) + { + v = serialize(v); + if (s) + { + s += ',' ; + } + s += serialize(prop) + ':' + v ; + } + } + return "{" + s + "}"; + } + } + return 'null'; + } + case 'number': + { + return isFinite(value) ? String(value) : 'null' ; + } + case 'string' : + { + l = (value as String).length ; + s = '"' ; + for (i = 0 ; i < l ; i += 1) + { + c = (value as String).charAt(i) ; + if (c >= ' ') + { + if (c == '\\' || c == '"') + { + s += '\\'; + } + s += c; + } + else + { + switch (c) + { + case '\b': + { + s += '\\b'; + break ; + } + case '\f' : + { + s += '\\f' ; + break ; + } + case '\n' : + { + s += '\\n' ; + break ; + } + case '\r': + { + s += '\\r' ; + break ; + } + case '\t': + { + s += '\\t' ; + break ; + } + default: + { + var code:Number = c.charCodeAt() ; + s += '\\u00' + String(Math.floor(code / 16).toString(16)) + ((code % 16).toString(16)) ; + } + } + } + } + return s + '"' ; + } + case 'boolean' : + { + return String(value); + } + default : + { + return 'null'; + } + } + } + + /** + * The current position of the iterator in the source. + */ + protected var at:Number = 0 ; + + /** + * The current character of the iterator in the source. + */ + protected var ch:String = ' ' ; + + /** + * Check the Array objects in the source expression. + */ + protected function array():Array + { + var a:Array = []; + if ( ch == '[' ) + { + next() ; + white() ; + if (ch == ']') + { + next(); + return a; + } + while (ch) + { + a.push( value() ) ; + white(); + if (ch == ']') + { + next(); + return a; + } + else if (ch != ',') + { + break; + } + next(); + white(); + } + } + error( JSONStrings.badArray ); + return null ; + } + + /** + * Throws a JSONError with the passed-in message. + */ + protected function error( m:String ):void + { + throw new JSONError( m, at - 1 , source) ; + } + + /** + * Indicates if the passed-in character is a digit. + */ + protected function isDigit( c:String ):Boolean + { + return( ("0" <= c) && (c <= "9") ); + } + + /** + * Indicates if the passed-in character is a hexadecimal digit. + */ + protected function isHexDigit( c:String ):Boolean + { + return( isDigit( c ) || (("A" <= c) && (c <= "F")) || (("a" <= c) && (c <= "f")) ); + } + + /** + * Indicates if the current character is a key. + */ + protected function key():* + { + var s:String = ch ; + var semiColon:int = source.indexOf( ':' , at ) ; + var quoteIndex:int = source.indexOf( '"' , at ) ; + var squoteIndex:int = source.indexOf( "'" , at ) ; + if( (quoteIndex <= semiColon && quoteIndex > -1) || (squoteIndex <= semiColon && squoteIndex > -1)) + { + s = string() ; + white() ; + if(ch == ':') + { + return s; + } + else + { + error(JSONStrings.badKey); + } + } + while ( next() ) // Use key handling + { + if (ch == ':') + { + return s; + } + if(ch <= ' ') + { + // + } + else + { + s += ch; + } + } + error( JSONStrings.badKey ) ; + } + + /** + * Returns the next character in the source String representation. + * @return the next character in the source String representation. + */ + protected function next():String + { + ch = source.charAt(at); + at += 1; + return ch; + } + + /** + * Check the Number values in the source expression. + */ + protected function number():* + { + + var n:* = '' ; + var v:* ; + var hex:String = '' ; + var sign:String = '' ; + if (ch == '-') + { + n = '-'; + sign = n ; + next(); + } + if( ch == "0" ) + { + next() ; + if( ( ch == "x") || ( ch == "X") ) + { + next(); + while( isHexDigit( ch ) ) + { + hex += ch ; + next(); + } + if( hex == "" ) + { + error(JSONStrings.malFormedHexadecimal) ; + } + else + { + return Number( sign + "0x" + hex ) ; + } + } + else + { + n += "0" ; + } + } + while ( isDigit(ch) ) + { + n += ch ; + next() ; + } + if (ch == '.') + { + n += '.'; + while (next() && ch >= '0' && ch <= '9') + { + n += ch ; + } + } + v = 1 * n ; + if (!isFinite(v)) + { + error( JSONStrings.badNumber ); + } + else + { + return v ; + } + return NaN ; + } + + /** + * Check the Object values in the source expression. + */ + protected function object():* + { + var k:* = {} ; + var o:* = {} ; + if (ch == '{') + { + next(); + white(); + if (ch == '}') + { + next() ; + return o ; + } + while (ch) + { + k = key() ; + white(); + if (ch != ':') + { + break; + } + next(); + o[k] = value() ; + white(); + if (ch == '}') + { + next(); + return o; + } + else if (ch != ',') + { + break; + } + next(); + white(); + } + } + error( JSONStrings.badObject ) ; + } + + /** + * Check the string objects in the source expression. + */ + protected function string():* + { + var i:* = '' ; + var s:* = '' ; + var t:* ; + var u:* ; + var outer:Boolean ; + if (ch == '"' || ch == "'" ) + { + var outerChar:String = ch ; + while ( next() ) + { + if (ch == outerChar) + { + next() ; + return s ; + } + else if (ch == '\\') + { + switch ( next() ) + { + case 'b': + { + s += '\b' ; + break ; + } + case 'f' : + { + s += '\f'; + break ; + } + case 'n': + { + s += '\n'; + break ; + } + case 'r' : + { + s += '\r'; + break ; + } + case 't' : + { + s += '\t' ; + break ; + } + case 'u' : + { + u = 0; + for (i = 0; i < 4; i += 1) + { + t = parseInt( next() , 16 ) ; + if (!isFinite(t)) + { + outer = true; + break; + } + u = u * 16 + t; + } + if(outer) + { + outer = false; + break; + } + s += String.fromCharCode(u); + break; + } + default : + { + s += ch; + } + } + } + else + { + s += ch; + } + } + } + error( JSONStrings.badString ); + return null ; + } + + /** + * Evaluates the values in the source expression. + */ + protected function value():* + { + white() ; + if (ch == '{' ) + { + return object(); + } + else if ( ch == '[' ) + { + return array(); + } + else if ( ch == '"' || ch == "'" ) + { + return string(); + } + else if ( ch == '-' ) + { + return number(); + } + else + { + return ( ch >= '0' && ch <= '9' ) ? number() : word() ; + } + } + + /** + * Check all white spaces. + */ + protected function white():void + { + while (ch) + { + if (ch <= ' ') + { + next(); + } + else if (ch == '/') + { + switch ( next() ) + { + case '/' : + { + while ( next() && ch != '\n' && ch != '\r') + { + } + break; + } + case '*' : + { + next(); + for (;;) + { + if (ch) + { + if (ch == '*') + { + if ( next() == '/' ) + { + next(); + break; + } + } + else + { + next(); + } + } + else + { + error( JSONStrings.unterminatedComment ); + } + } + break ; + } + default : + { + error( JSONStrings.syntaxError ); + } + } + } + else + { + break ; + } + } + } + + /** + * Check all special words in the source to evaluate. + */ + protected function word():* + { + if (ch == 't') + { + if (next() == 'r' && next() == 'u' && next() == 'e') + { + next() ; + return true ; + } + } + else if ( ch == 'f' ) + { + if (next() == 'a' && next() == 'l' && next() == 's' && next() == 'e') + { + next() ; + return false ; + } + } + else if ( ch == 'n' ) + { + if (next() == 'u' && next() == 'l' && next() == 'l') + { + next() ; + return null ; + } + } + error( JSONStrings.syntaxError ); + return null ; + } + + /** + * @private + */ + private var _prettyIndent:int = 0 ; + + /** + * @private + */ + private var _prettyPrinting:Boolean ; + + /** + * @private + */ + private var _indentor:String = " " ; + } +} diff --git a/externals/vegas/src/vegas/strings/json/JSONStrings.as b/externals/vegas/src/vegas/strings/json/JSONStrings.as new file mode 100644 index 0000000000..042876a694 --- /dev/null +++ b/externals/vegas/src/vegas/strings/json/JSONStrings.as @@ -0,0 +1,85 @@ +/* + + Version: MPL 1.1/GPL 2.0/LGPL 2.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + + The Original Code is VEGAS Framework. + + The Initial Developer of the Original Code is + ALCARAZ Marc (aka eKameleon) . + Portions created by the Initial Developer are Copyright (C) 2004-2011 + the Initial Developer. All Rights Reserved. + + Contributor(s) : + + Alternatively, the contents of this file may be used under the terms of + either the GNU General Public License Version 2 or later (the "GPL"), or + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + in which case the provisions of the GPL or the LGPL are applicable instead + of those above. If you wish to allow use of your version of this file only + under the terms of either the GPL or the LGPL, and not to allow others to + use your version of this file under the terms of the MPL, indicate your + decision by deleting the provisions above and replace them with the notice + and other provisions required by the LGPL or the GPL. If you do not delete + the provisions above, a recipient may use your version of this file under + the terms of any one of the MPL, the GPL or the LGPL. + +*/ + +package vegas.strings.json +{ + /** + * The string messages used in the JSON class. + */ + public class JSONStrings + { + /** + * The bad Array error message. + */ + public static var badArray:String = "Bad Array" ; + + /** + * The bad key error message. + */ + public static var badKey:String = "Bad key" ; + + /** + * The bad Number error message. + */ + public static var badNumber:String = "Bad Number" ; + + /** + * The bad Object error message. + */ + public static var badObject:String = "Bad Object" ; + + /** + * The bad String error message. + */ + public static var badString:String = "Bad String" ; + + /** + * The mal formed Hexadecimal error message. + */ + public static var malFormedHexadecimal:String = "Mal formed Hexadecimal" ; + + /** + * The syntax error message. + */ + public static var syntaxError:String = "Syntax Error" ; + + /** + * The unterminated comment error message. + */ + public static var unterminatedComment:String = "Unterminated Comment" ; + } +} \ No newline at end of file diff --git a/src/infrastructure/lint/engine/PhabricatorLintEngine.php b/src/infrastructure/lint/engine/PhabricatorLintEngine.php index 3ecb4cc01d..217709152a 100644 --- a/src/infrastructure/lint/engine/PhabricatorLintEngine.php +++ b/src/infrastructure/lint/engine/PhabricatorLintEngine.php @@ -33,6 +33,11 @@ class PhabricatorLintEngine extends PhutilLintEngine { $linters[] = $javelin_linter; foreach ($paths as $path) { + if (strpos($path, 'support/aphlict/') !== false) { + // This stuff is Node.js, not Javelin, so don't apply the Javelin + // linter. + continue; + } if (preg_match('/\.js$/', $path)) { $javelin_linter->addPath($path); $javelin_linter->addData($path, $this->loadData($path)); diff --git a/support/aphlict/client/build_aphlict_client.sh b/support/aphlict/client/build_aphlict_client.sh new file mode 100755 index 0000000000..035b9ca80b --- /dev/null +++ b/support/aphlict/client/build_aphlict_client.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +BASEDIR=`dirname $0` +ROOT=`cd $BASEDIR/../../../ && pwd`; + +if [ -z "$MXMLC" ]; then + echo "ERROR: Define environmental variable MXMLC to point to 'mxmlc' binary."; + exit 1; +fi; + +set -e +set -x + +# cp -R $ROOT/externals/vegas/src $BASEDIR/src/vegas + +(cd $BASEDIR && $MXMLC \ + -output aphlict.swf \ + -default-background-color=0x444444 \ + -default-size=500,500 \ + -target-player=10.2.0 \ + -warnings=true \ + -debug=true \ + -source-path=$ROOT/externals/vegas/src \ + -static-link-runtime-shared-libraries=true \ + src/Aphlict.as) + +mv $BASEDIR/aphlict.swf $ROOT/webroot/rsrc/swf/aphlict.swf diff --git a/support/aphlict/client/src/Aphlict.as b/support/aphlict/client/src/Aphlict.as new file mode 100644 index 0000000000..3359151053 --- /dev/null +++ b/support/aphlict/client/src/Aphlict.as @@ -0,0 +1,162 @@ +package { + + import flash.net.*; + import flash.utils.*; + import flash.media.*; + import flash.display.*; + import flash.events.*; + import flash.external.ExternalInterface; + + import com.phabricator.*; + + import vegas.strings.JSON; + + public class Aphlict extends Sprite { + + private var client:String; + + private var master:LocalConnection; + private var recv:LocalConnection; + private var send:LocalConnection; + + private var receiver:AphlictReceiver; + private var loyalUntil:Number = 0; + private var subjects:Array; + private var frequency:Number = 100; + + private var socket:Socket; + private var readBuffer:ByteArray; + + public function Aphlict() { + super(); + + this.master = null; + this.receiver = new AphlictReceiver(this); + this.subjects = []; + + this.send = new LocalConnection(); + + this.recv = new LocalConnection(); + this.recv.client = this.receiver; + for (var ii:Number = 0; ii < 32; ii++) { + try { + this.recv.connect('aphlict_subject_' + ii); + this.client = 'aphlict_subject_' + ii; + } catch (x:Error) { + // Some other Aphlict client is holding that ID. + } + } + + if (!this.client) { + // Too many clients open already, just exit. + return; + } + + this.usurp(); + } + + private function usurp():void { + if (this.master) { + for (var ii:Number = 0; ii < this.subjects.length; ii++) { + if (this.subjects[ii] == this.client) { + continue; + } + this.send.send(this.subjects[ii], 'remainLoyal'); + } + } else if (this.loyalUntil < new Date().getTime()) { + var recv:LocalConnection = new LocalConnection(); + recv.client = this.receiver; + try { + recv.connect('aphlict_master'); + this.master = recv; + this.subjects = [this.client]; + + this.connectToServer(); + + } catch (x:Error) { + // Can't become the master. + } + + if (!this.master) { + this.send.send('aphlict_master', 'becomeLoyal', this.client); + this.remainLoyal(); + } + } + setTimeout(this.usurp, this.frequency); + } + + public function connectToServer():void { + var socket:Socket = new Socket(); + + socket.addEventListener(Event.CONNECT, didConnectSocket); + socket.addEventListener(Event.CLOSE, didCloseSocket); + socket.addEventListener(IOErrorEvent.IO_ERROR, didErrorSocket); + socket.addEventListener(ProgressEvent.SOCKET_DATA, didReceiveSocket); + + socket.connect('127.0.0.1', 2600); + + this.readBuffer = new ByteArray(); + this.socket = socket; + } + + private function didConnectSocket(event:Event):void { + this.log("Connect!"); + } + + private function didCloseSocket(event:Event):void { + this.log("Close!"); + } + + private function didErrorSocket(event:Event):void { + this.log("Error!"); + } + + private function didReceiveSocket(event:Event):void { + var b:ByteArray = this.readBuffer; + this.socket.readBytes(b, b.length); + + do { + b = this.readBuffer; + b.position = 0; + + if (b.length <= 8) { + break; + } + + var msg_len:Number = parseInt(b.readUTFBytes(8), 10); + if (b.length >= msg_len + 8) { + var bytes:String = b.readUTFBytes(msg_len); + var data:Object = JSON.deserialize(bytes); + var t:ByteArray = new ByteArray(); + t.writeBytes(b, msg_len + 8); + this.readBuffer = t; + + for (var ii:Number = 0; ii < this.subjects.length; ii++) { + this.send.send(this.subjects[ii], 'receiveMessage', data); + } + } else { + break; + } + } while (true); + + } + + public function remainLoyal():void { + this.loyalUntil = new Date().getTime() + (2 * this.frequency); + } + + public function becomeLoyal(subject:String):void { + this.subjects.push(subject); + } + + public function receiveMessage(msg:Object):void { + this.log("Received message!"); + } + + public function log(msg:String):void { + ExternalInterface.call('console.log', msg); + } + + } + +} \ No newline at end of file diff --git a/support/aphlict/client/src/com/phabricator/AphlictReceiver.as b/support/aphlict/client/src/com/phabricator/AphlictReceiver.as new file mode 100644 index 0000000000..a7eae20a58 --- /dev/null +++ b/support/aphlict/client/src/com/phabricator/AphlictReceiver.as @@ -0,0 +1,25 @@ +package com.phabricator { + + public class AphlictReceiver { + + private var core:Object; + + public function AphlictReceiver(core:Object) { + this.core = core; + } + + public function remainLoyal():void { + this.core.remainLoyal(); + } + + public function becomeLoyal(subject:String):void { + this.core.becomeLoyal(subject); + } + + public function receiveMessage(msg:Object):void { + this.core.receiveMessage(msg); + } + + } + +} \ No newline at end of file diff --git a/support/aphlict/server/aphlict_server.js b/support/aphlict/server/aphlict_server.js new file mode 100755 index 0000000000..eedc35c581 --- /dev/null +++ b/support/aphlict/server/aphlict_server.js @@ -0,0 +1,42 @@ +var net = require('net'); + +function getFlashPolicy() { + return [ + '', + '', + '', + '', + '' + ].join("\n"); +} + +net.createServer(function(socket) { + socket.on('data', function() { + socket.write(getFlashPolicy() + '\0'); + }); +}).listen(843); + +var sp_server = net.createServer(function(socket) { + function xwrite() { + var data = {hi: "hello"}; + var serial = JSON.stringify(data); + + var length = Buffer.byteLength(serial, 'utf8'); + length = length.toString(); + while (length.length < 8) { + length = "0" + length; + } + + socket.write(length + serial); + + console.log('write : ' + length + serial); + } + + socket.on('connect', function() { + + xwrite(); + setInterval(xwrite, 1000); + + }); +}).listen(2600); diff --git a/webroot/rsrc/swf/aphlict.swf b/webroot/rsrc/swf/aphlict.swf new file mode 100644 index 0000000000..51c64d1268 Binary files /dev/null and b/webroot/rsrc/swf/aphlict.swf differ diff --git a/webroot/rsrc/swf/test.html b/webroot/rsrc/swf/test.html new file mode 100755 index 0000000000..1cdf65ae62 --- /dev/null +++ b/webroot/rsrc/swf/test.html @@ -0,0 +1,4 @@ + + + + \ No newline at end of file