LocalConnectionTest

by umhr
♥0 | Line 149 | Modified 2012-05-24 16:45:20 | MIT License
play

ActionScript3 source code

/**
 * Copyright umhr ( http://wonderfl.net/user/umhr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5ZlV
 */

package 
{
    import com.bit101.components.Label;
    import com.bit101.components.NumericStepper;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.SharedObject;
    
    /**
     * ...
     * @author umhr
     */
    [SWF(width = 465, height = 465, backgroundColor = 0xEEEEEE, frameRate = 60)]
    public class WonderflMain extends Sprite 
    {
        private var _numericStepper:NumericStepper;
        public function WonderflMain():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            var sharedObject:SharedObject = SharedObject.getLocal("my_data");
            
            if (sharedObject) {
                var obj:Object = sharedObject.data;
                if (isNaN(obj.count)) {
                    obj["count"] = 0;
                }else {
                    obj["count"] ++;
                }
            }
            
            sharedObject.flush();
            
            addChild(new LocalConnectionSenderExample("myConnection" + (obj.count) % 2));
            addChild(new LocalConnectionReceiverExample("myConnection" + (obj.count + 1) % 2));
            
            
            setFPSStepper();
        }
        
        private function setFPSStepper():void 
        {
            new Label(this, 320, 440, "FPS:");
            _numericStepper = new NumericStepper(this, 350, 440, onNumericStepper);
            _numericStepper.minimum = 1;
            _numericStepper.maximum = 120;
            _numericStepper.value = 60;
        }
        
        private function onNumericStepper(event:Event):void 
        {
            stage.frameRate = _numericStepper.value;
        }
        
    }
    
}

    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.StatusEvent;
    import flash.net.LocalConnection;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFieldType;

    class LocalConnectionSenderExample extends Sprite {
        private var conn:LocalConnection;
        
        // UI elements
        private var messageLabel:TextField;
        private var message:TextField;
        private var sendBtn:Sprite;
        private var _connectionName:String = "myConnection";
        
        public function LocalConnectionSenderExample(connectionName:String) {
            _connectionName = connectionName;
            buildUI();
            sendBtn.addEventListener(MouseEvent.CLICK, sendMessage);
            conn = new LocalConnection();
            conn.addEventListener(StatusEvent.STATUS, onStatus);
        }
        
        private function sendMessage(event:MouseEvent):void {
            conn.send(_connectionName, "lcHandler", message.text, new Date().time);
            message.text = "";
        }
        
        private function onStatus(event:StatusEvent):void {
            switch (event.level) {
                case "status":
                    //trace("LocalConnection.send() succeeded");
                    break;
                case "error":
                    trace("LocalConnection.send() failed");
                    message.text = "ブラウザでこのページと同じページを開いてください。";
                    break;
            }
        }
        
        private function buildUI():void {
            const hPadding:uint = 5;
            // messageLabel
            messageLabel = new TextField();
            messageLabel.x = 8;
            messageLabel.y = 8;
            messageLabel.text = "Text to send:";
            messageLabel.autoSize = TextFieldAutoSize.LEFT;
            addChild(messageLabel);
            
            // message
            message = new TextField();
            message.x = messageLabel.x + messageLabel.width + hPadding;
            message.y = 8;
            message.width = 300;
            message.height = 20;
            message.background = true;
            message.border = true;
            message.type = TextFieldType.INPUT;
            addChild(message);
            
            // sendBtn
            sendBtn = new Sprite();
            sendBtn.x = message.x + message.width + hPadding;
            sendBtn.y = 8;
            var sendLbl:TextField = new TextField();
            sendLbl.x = 1 + hPadding;
            sendLbl.y = 1;
            sendLbl.selectable = false;
            sendLbl.autoSize = TextFieldAutoSize.LEFT;
            sendLbl.text = "Send";
            sendBtn.addChild(sendLbl);
            sendBtn.graphics.lineStyle(1);
            sendBtn.graphics.beginFill(0xcccccc);
            sendBtn.graphics.drawRoundRect(0, 0, (sendLbl.width + 2 + hPadding + hPadding), (sendLbl.height + 2), 5, 5);
            sendBtn.graphics.endFill();
            addChild(sendBtn);
            
        }
    }


    import flash.display.Sprite;
    import flash.net.LocalConnection;
    import flash.text.TextField;
    class LocalConnectionReceiverExample extends Sprite {
        private var conn:LocalConnection;
        private var output:TextField;
        private var _connectionName:String = "myConnection";
        
        public function LocalConnectionReceiverExample(connectionName:String) {
            _connectionName = connectionName;
            buildUI();
            
            conn = new LocalConnection();
            conn.client = this;
            try {
                conn.connect(_connectionName);
            } catch (error:ArgumentError) {
                trace("Can't connect...the connection name is already being used by another SWF");
            }
        }
        
        public function lcHandler(msg:String, time:Number):void {
            output.appendText(msg +" " + String(new Date().time-Number(time)) + " msec" +"\n");
        }
        
        private function buildUI():void {
            output = new TextField();
            output.background = true;
            output.border = true;
            output.wordWrap = true;
            output.x = 8;
            output.y = 32;
            output.width = 420;
            output.height = 400;
            output.text = "";
            addChild(output);
        }
    }