Personal tools


Livelets.as

From OrganicDesign

Jump to: navigation, search
// Extension:Livelets
// - See http://www.mediawiki.org/wiki/Extension:Livelets for installation and usage details
// - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
 
// All this needs to do is unintelligently route incoming update messages to the recipient livelets by id
// - each message can just be update:id1,id2,id3,id4... which executes the $wgLiveletsUpdate code for each id
// - remember that the SWF binary needs to be served from livelets.pl
 
class live {
 
	// Properties
	static var app : live;
	var socket     : XMLSocket;
 
	// Entry point
	static function main(mc) {
		app = new live();
		}
 
	// Constructor
	function live() {
 
		// Initialise objects
		this.socket        = new XMLSocket();
		_root.connected    = false;
		_root.ctr          = 1;
		_root.onEnterFrame = this.reduce;
		_root.log          = this.log;
 
		// When connected, send login info
		socket.onConnect = function(success) {
			if (_root.connected = success) {
				_root.log('Connected.');
				// request a dedicated peerd child spawn to handle this stream
				_root.request('/connect/peer/interface');
				}
			else {
				_root.log('Connection failed!');
				_root.log('Will retry soon...');
				}
			};
 
		// Decode incoming message
		socket.onData = function(data) {
			_root.log('Message received:');
			_root.log(data);
			};
 
		socket.onClose = function() {
			_root.connected = false;
			_root.log('Connection closed!');
			_root.ctr = 1;
			_root.log('Will retry soon...');
			};
 
		}
 
	function log(entry) {
		return entry;
		}
 
	// Called periodically (per frame)
	function reduce() {
//		if (!this.socket.connected && ++this.ctr%250 == 1) this.peerConnect('organicdesign.co.nz',1729);
		}
 
	// Connect to our host to establish stream
	function peerConnect(domain,port) {
		if (this.socket.connect(domain,port)) log('Connecting to '+domain+':'+port);
		else this.log('Could not initialise connection!');
		}
 
	// Send a message to the associated peer
	function request(request) {
		this.log('Sending message: "'+request+'"');
		this.socket.send('GET '+request+' HTTP/1.1'+String.fromCharCode(13,10,13,10));
		}
	}