mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-28 17:52:43 +01:00
Aphlict, simple notification server
Summary: This is purely a prototype at the moment, but the basic functionality sort of works. I'm not sure how far I want to go with this but I think we might be able to get somewhere without it being gross. The idea here is to build a notification server WITHOUT using Comet, since Comet is extremely difficult and complicated. Instead, I use Flash on the client. LocalConnection allows flash instances to talk to each other and connect() can be used as a locking primitive. This allows all the instances to elect a master instance in a race-safe way. The master is responsible for opening a single connnection to the server. On the server, I use Node.js since PHP is pretty unsuitable for this task. See Github Issue #3: https://github.com/facebook/phabricator/issues/3 One thing I need to figure out next is if I can reasonably do SSL/TSL over Flash (it looks like I can, in theory, with the as3crypto library) or if the server needs to just send down version information and trigger a separate Ajax call on the client. Test Plan: Created a client pool and connected it to the server, with election and failover apparently working correctly. Reviewed By: aran Reviewers: Girish, aran, jungejason, tuomaspelkonen, davidrecordon Commenters: Girish, davidrecordon CC: aran, epriestley, Girish, davidrecordon Differential Revision: 284
This commit is contained in:
parent
7e675b6687
commit
84731e8f00
14 changed files with 1994 additions and 0 deletions
581
externals/vegas/LICENSE
vendored
Normal file
581
externals/vegas/LICENSE
vendored
Normal file
|
@ -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.]
|
||||||
|
|
29
externals/vegas/README
vendored
Normal file
29
externals/vegas/README
vendored
Normal file
|
@ -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.
|
86
externals/vegas/src/system/Serializer.as
vendored
Normal file
86
externals/vegas/src/system/Serializer.as
vendored
Normal file
|
@ -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 <zwetan@gmail.com> and Marc Alcaraz <ekameleon@gmail.com>.
|
||||||
|
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.
|
||||||
|
* <p><b>Note :</b> Every serializers (eden, json, wddx, etc.) should implement it.</p>
|
||||||
|
*/
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
107
externals/vegas/src/vegas/strings/JSON.as
vendored
Normal file
107
externals/vegas/src/vegas/strings/JSON.as
vendored
Normal file
|
@ -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) <ekameleon@gmail.com>.
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <code class="prettyprint">JSON</code> (JavaScript object Notation) is a lightweight data-interchange format.
|
||||||
|
* <p>More information in the official site : <a href="http://www.JSON.org/">http://www.JSON.org</a></p>
|
||||||
|
* <p>Add Hexa Digits tool in deserialize method - <a href="http://code.google.com/p/edenrr/">eden inspiration</a></p>
|
||||||
|
*
|
||||||
|
* @example Example
|
||||||
|
* <listing version="3.0">
|
||||||
|
* <code class="prettyprint">
|
||||||
|
* 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() ) ;
|
||||||
|
* }
|
||||||
|
* </code>
|
||||||
|
* </listing>
|
||||||
|
*/
|
||||||
|
public var JSON:JSONSerializer = new JSONSerializer() ;
|
||||||
|
}
|
84
externals/vegas/src/vegas/strings/json/JSONError.as
vendored
Normal file
84
externals/vegas/src/vegas/strings/json/JSONError.as
vendored
Normal file
|
@ -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) <ekameleon@gmail.com>.
|
||||||
|
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 ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
757
externals/vegas/src/vegas/strings/json/JSONSerializer.as
vendored
Normal file
757
externals/vegas/src/vegas/strings/json/JSONSerializer.as
vendored
Normal file
|
@ -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) <ekameleon@gmail.com>.
|
||||||
|
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.
|
||||||
|
* <code class="prettyprint">JSON</code> (JavaScript object Notation) is a lightweight data-interchange format.
|
||||||
|
* <p>More information in the official site : <a href="http://www.JSON.org/">http://www.JSON.org</a></p>
|
||||||
|
* <p>Add Hexa Digits tool in deserialize method - <a href="http://code.google.com/p/edenrr/">eden inspiration</a></p>
|
||||||
|
* <p><b>Example :</b></p>
|
||||||
|
* <pre class="prettyprint">
|
||||||
|
* 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() ) ;
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
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.
|
||||||
|
* <p><b>Example :</b></p>
|
||||||
|
* <pre class="prettyprint">
|
||||||
|
* "hello world" --> "hello world"
|
||||||
|
* "0xFF" --> 255
|
||||||
|
* "{a:1,"b":2}" --> {a:1,b:2}
|
||||||
|
* </pre>
|
||||||
|
* @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 = " " ;
|
||||||
|
}
|
||||||
|
}
|
85
externals/vegas/src/vegas/strings/json/JSONStrings.as
vendored
Normal file
85
externals/vegas/src/vegas/strings/json/JSONStrings.as
vendored
Normal file
|
@ -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) <ekameleon@gmail.com>.
|
||||||
|
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" ;
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,6 +33,11 @@ class PhabricatorLintEngine extends PhutilLintEngine {
|
||||||
$linters[] = $javelin_linter;
|
$linters[] = $javelin_linter;
|
||||||
|
|
||||||
foreach ($paths as $path) {
|
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)) {
|
if (preg_match('/\.js$/', $path)) {
|
||||||
$javelin_linter->addPath($path);
|
$javelin_linter->addPath($path);
|
||||||
$javelin_linter->addData($path, $this->loadData($path));
|
$javelin_linter->addData($path, $this->loadData($path));
|
||||||
|
|
27
support/aphlict/client/build_aphlict_client.sh
Executable file
27
support/aphlict/client/build_aphlict_client.sh
Executable file
|
@ -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
|
162
support/aphlict/client/src/Aphlict.as
Normal file
162
support/aphlict/client/src/Aphlict.as
Normal file
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
42
support/aphlict/server/aphlict_server.js
Executable file
42
support/aphlict/server/aphlict_server.js
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
var net = require('net');
|
||||||
|
|
||||||
|
function getFlashPolicy() {
|
||||||
|
return [
|
||||||
|
'<?xml version="1.0"?>',
|
||||||
|
'<!DOCTYPE cross-domain-policy SYSTEM ' +
|
||||||
|
'"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">',
|
||||||
|
'<cross-domain-policy>',
|
||||||
|
'<allow-access-from domain="*" to-ports="*"/>',
|
||||||
|
'</cross-domain-policy>'
|
||||||
|
].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);
|
BIN
webroot/rsrc/swf/aphlict.swf
Normal file
BIN
webroot/rsrc/swf/aphlict.swf
Normal file
Binary file not shown.
4
webroot/rsrc/swf/test.html
Executable file
4
webroot/rsrc/swf/test.html
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="movie_name" align="middle">
|
||||||
|
<param name="movie" value="aphlict.swf" />
|
||||||
|
<param name="allowScriptAccess" value="always" />
|
||||||
|
</object>
|
Loading…
Reference in a new issue