1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-24 15:52:41 +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:
epriestley 2011-05-15 14:05:02 -07:00
parent 7e675b6687
commit 84731e8f00
14 changed files with 1994 additions and 0 deletions

581
externals/vegas/LICENSE vendored Normal file
View 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
View 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.

View 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;
}
}

View 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 &lt; 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() ;
}

View 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 ;
}
}
}

View 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 &lt; 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 = " " ;
}
}

View 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" ;
}
}

View file

@ -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));

View 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

View 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);
}
}
}

View file

@ -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);
}
}
}

View 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);

Binary file not shown.

4
webroot/rsrc/swf/test.html Executable file
View 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>