In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

localhostのUnion Serverからtwitする

locahostのUnion Server経由でtwitterに投稿してみる
http://fla.la/archives/369
の記事と連動しています。
@author naoto koshikawa
Get Adobe Flash player
by naoto5959 05 Sep 2009
/**
 * Copyright naoto5959 ( http://wonderfl.net/user/naoto5959 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/a6S8
 */

package  
{
    import com.bit101.components.PushButton;
    import com.bit101.components.Text;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFieldType;
    import flash.text.TextFormat;
    import net.user1.logger.LogEvent;
    import net.user1.logger.Logger;
    import net.user1.reactor.IClient;
    import net.user1.reactor.Reactor;
    import net.user1.reactor.ReactorEvent;
    import net.user1.reactor.Room;
    import net.user1.reactor.RoomEvent;
    import net.user1.reactor.RoomModules;
    import net.user1.reactor.RoomModuleType;
    /**
     * locahostのUnion Server経由でtwitterに投稿してみる
     * http://fla.la/archives/369
     * の記事と連動しています。
     * @author naoto koshikawa
     */
    public class TryUnion4 extends Sprite
    {
        //----------------------------------------------------------------------
        //  properties
        //----------------------------------------------------------------------
        //------------------------------
        //  private properties
        //------------------------------
        /**
         * Reactorインスタンス
         */
        private var _reactor:Reactor;
        
        /**
         * Roomインスタンス
         */
        private var _room:Room;
        
        /**
         * Loggerインスタンス
         */
        private var _logger:Logger;
        
        /**
         * Log表示用TextField
         */
        private var _logField:TextField;
        
        /**
         * twit用TextField
         */
        private var _twitField:TextField;
        
        /**
         * twit用button
         */
        private var _twitButton:PushButton;
        
        //----------------------------------------------------------------------
        //  methods
        //----------------------------------------------------------------------
        //------------------------------
        //  public methods
        //------------------------------
        /**
         * constructor
         */
        public function TryUnion4() 
        {
            // ログ表示用TextFieldを作成します。
            _logField = new TextField();
            _logField.defaultTextFormat = new TextFormat("_等幅", 10);
            _logField.border = true;
            _logField.width = 463;
            _logField.height = 440;
            _logField.x = 1;
            _logField.y = 1;
            _logField.multiline = true;
            _logField.wordWrap = true;
            addChild(_logField);
            
            // twit用TextFieldを作成します。
            _twitField = new TextField();
            _twitField.type= TextFieldType.INPUT;
            _twitField.defaultTextFormat = new TextFormat("_等幅", 10);
            _twitField.border = true;
            _twitField.maxChars = 140;
            _twitField.height = 15;
            _twitField.width = 365;
            _twitField.x = 1;
            _twitField.y = 445;
            addChild(_twitField);
            
            // twitボタンを作成します。
            _twitButton = new PushButton(this, 370, 445, "twit");
            _twitButton.setSize(95, 15);
            
            // Reactorインスタンスを生成します。
            _reactor = new Reactor();
            _reactor.addEventListener(ReactorEvent.READY, _reactor_readyHandler);
            
            // Loggerインスタンスの参照を取得します。
            _logger = _reactor.getLog();
            _logger.addEventListener(LogEvent.UPDATE, _logger_updateHandler);
            
            // localhostのUnion Serverへ接続します。
            _reactor.connect("localhost", 9100);
        }
        
        /**
         * log Fieldにテキストを追加します。
         * @param    text
         * @param    color
         */
        private function appendText(text:String, color:uint = 0x000000):void
        {
            _logField.htmlText +=
                '<font color="#' + color.toString(16) + '" >' + text + '</font><br />';
            _logField.scrollV = _logField.maxScrollV;
        }
        
        //----------------------------------------------------------------------
        //  event handler
        //----------------------------------------------------------------------
        /**
         * ReactorEvent.Ready
         * @param    event
         */
        private function _reactor_readyHandler(event:ReactorEvent):void
        {
            // Room モジュールを指定します。
            var modules:RoomModules = new RoomModules();
            modules.addModule(
                "com.asmple.server.union.module.room.TwitModuleSample",
                RoomModuleType.CLASS);
            
            // Room モジュールを指定しながらRoomを生成します。
            _room = _reactor.getRoomManager().createRoom(
                "twitRoom", null, null, modules
             );
            _room.addEventListener(RoomEvent.JOIN, _room_joinHandler);
            
            // ServerからのMessageを監視します。
            _room.addMessageListener("response", _room_responseMessageHandler);
            
            // Roomにjoinします。
            _room.join();
        }
        
        /**
         * RoomEvent.JOIN
         * @param    event
         */
        private function _room_joinHandler(event:RoomEvent):void
        {
            // twitボタンのクリックイベントを監視します。
            _twitButton.addEventListener(
                MouseEvent.CLICK, _twitButton_clickHandler);
        }
        
        /**
         * response Messageを受信した際に実行されるハンドラ
         * @param    fromClient
         * @param    message
         */
        private function _room_responseMessageHandler(
                fromClient:IClient, result:String, message:String):void
        {
            if (result == "ok")
            {
                message = '<a href="' + message + '">' + message + '</a>';
                appendText(message, 0x0000FF);
            }
            else if (result == "ng")
            {
                appendText(message, 0xFF0000);
            }
        }
        /**
         * MouseEvent.CLICK
         * @param    event
         */
        private function _twitButton_clickHandler(event:MouseEvent):void
        {
            var message:String = _twitField.text;
            if (message.length == 0) return;
            
            message = encodeURI(message);
            _room.sendModuleMessage(
                "twit",
                { text:message }
            );
            
            _twitField.text = "";
        }
         
        /**
         * LogEvent.UPDATE
         * @param    event
         */
        private function _logger_updateHandler(event:LogEvent):void
        {
            appendText("[" + event.getLevel() + "]" + event.getMessage()); 
        }
    }
}