import flash.net.*; import flash.utils.Timer; import mx.events.*; import mx.controls.*; import mx.managers.PopUpManager; import mx.core.*; import mx.effects.*; import mx.binding.utils.ChangeWatcher; import Captty; import ParttyConnectionDialog; import CapttyUIAddedEffect; import CapttyUIRemovedEffect; private var _player:Captty; private var _loader:URLLoader; private var _host:String; private var _port:int; [Bindable] private var _url:String; [Bindable] private var _password:String; private var _panelTimer:Timer; private function init():void { _loader = new URLLoader(); _loader.addEventListener(Event.COMPLETE, loadCompleteHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); _loader.dataFormat = URLLoaderDataFormat.BINARY; terminal.addEventListener(KeyboardEvent.KEY_DOWN, keyboardHandler); //terminal.addEventListener(MouseEvent.MOUSE_MOVE, refreshPanelTimer); canvas.addEventListener(MouseEvent.MOUSE_MOVE, refreshPanelTimer); } private function start():void { _url = Application.application.parameters.url; _password = Application.application.parameters.password; if(!_password) { _password = ""; } if(!_url) { closeStartButton(); popUpDialog("Reply Partty! archive."); } else { var state:String = Application.application.parameters.state; if(state && state == "stop") { playStartButton(); } else { closeStartButton(); load(); } } } private function loadCompleteHandler(event:Event):void { trace("closed"); trace(_loader.data); _player = new Captty(_loader.data, terminal); _player.addEventListener(Event.COMPLETE, capttyCompleteHandler); _player.addEventListener(IOErrorEvent.IO_ERROR, capttyIOErrorHandler); _player.play(); initPanel(); terminal.setFocus(); //dispatchEvent(event); } private function capttyCompleteHandler(event:Event):void { popUpDialog("Replay finished."); } private function capttyIOErrorHandler(event:IOErrorEvent):void { popUpDialog("IO Error: " + event.text); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioError"); //dispatchEvent(event); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityError"); //dispatchEvent(event); } private function keyboardHandler(event:KeyboardEvent):void { if(!_player) { return; } switch(event.charCode) { case 'g'.charCodeAt(0): trace("rewind"); _player.rewind(); break; case 'h'.charCodeAt(0): trace("skip back"); _player.skipBack(); break; case 'j'.charCodeAt(0): trace("speed down"); _player.speedDown(); break; case 'k'.charCodeAt(0): trace("speed up"); _player.speedUp(); break; case 'l'.charCodeAt(0): trace("skip forward"); _player.skipForward(); break; case ';'.charCodeAt(0): trace("toggle pause"); _player.togglePause(); break; case '='.charCodeAt(0): trace("speed reset"); _player.speedReset(); break; } } private function popUpDialog(message:String):void { var dialog:CapttyPlayerConnectionDialog = PopUpManager.createPopUp(this, CapttyPlayerConnectionDialog, true) as CapttyPlayerConnectionDialog; dialog.addEventListener(CapttyPlayerConnectionDialog.CONNECT_START, dialogHandler); //dialog.x = (terminal.width - dialog.width) / 2; //dialog.y = (terminal.height - dialog.height) / 2; dialog.message.text = message; if(_url) { dialog.url.text = _url; } } private function dialogHandler(event:Event):void { _url = event.target.url.text; _password = event.target.password.text; PopUpManager.removePopUp(IFlexDisplayObject(event.target)); load(); } private function load():void { var req:URLRequest = new URLRequest(_url); // FIXME: _password _loader.load(req); } private function initPanel():void { panel.start(terminal, _player); panel.addEventListener(MouseEvent.MOUSE_MOVE, refreshPanelTimer); _panelTimer = new Timer(0, 1); _panelTimer.addEventListener(TimerEvent.TIMER_COMPLETE, hidePanelHandler); } private function refreshPanelTimer(event:Event = null):void { if(!_panelTimer) { return; } _panelTimer.reset(); _panelTimer.delay = 2.0 * 1000; // milliseconds _panelTimer.start(); if(!panel.visible) { panel.visible = true; } } private function hidePanelHandler(event:Event):void { if(!panel.visible) { return; } panel.visible = false; } private function playStartButton():void { startButton.x = (canvas.width - startButton.width ) / 2; startButton.y = (canvas.height - startButton.height) / 2; //startButton.x = (terminal.width - startButton.width ) / 2; //startButton.y = (terminal.height - startButton.height) / 2; } private function closeStartButton():void { canvas.removeChild(startButton); } private function startButtonClick():void { load(); } private function startButtonEnd():void { canvas.removeChild(startButton); }