zoukankan      html  css  js  c++  java
  • FluorineFx 之 DateFeed,既服务端的数据推送服务

    在开发如股票客户端的软件,客户端的数据在实时刷新,是由于服务端在不停的推送信息到客户端,客户端只是显示信息。
    1,webservice 的开发
         /// <summary>
        
    /// 构建推送数据的服务
        
    /// </summary>
        [RemotingService]
        
    public class DateFeedService
        {
            
    private static Thread _thread;
            
    private static bool _isRunning = false;
            
    static object _objLock = new object();

            
    public DateFeedService()
            {

            }

            
    public void toggle()
            {
                
    lock(_objLock)
                {
                    
    if (!_isRunning)
                    {
                        _isRunning 
    = true;
                        _thread 
    = new Thread(new ThreadStart(Push));
                        _thread.Start();
                    }
                    
    else
                    {
                        _isRunning 
    = false;
                        _thread.Join();
                        _thread 
    = null;
                    }
                }
            }

            
    public void Push()
            {
                
    while (_isRunning)
                {
                    MessageBroker msbroker 
    = MessageBroker.GetMessageBroker(null);
                    DateTime now 
    = DateTime.Now;
                    AsyncMessage msg 
    = new AsyncMessage();
                    msg.destination 
    = "datafeed";
                    msg.clientId 
    = Guid.NewGuid().ToString("D");
                    msg.messageId 
    = Guid.NewGuid().ToString("D");
                    msg.timestamp 
    = Environment.TickCount;
                    Hashtable body 
    = new Hashtable();
                    body.Add(
    "userId""deamon");
                    body.Add(
    "msg", now.ToString());
                    msg.body 
    = body;
                    msbroker.RouteMessage(msg);
                    Thread.Sleep(
    1000);
                }
            }
        }


    2.配置
    WEB-INF/flex/messaging-config.xml

     
    <destination id="datafeed">
        
    <adapter ref="messagingAdapter"/>
        
    <channels>
          
    <channel ref="my-rtmp"/>
        
    </channels>
        
    <properties>
          
    <source>*</source>
          
    <network>
            
    <!-- The session-timeout element specifies the idle time in minutes before a subscriber is unsubscribed. When you set the value to 0 (zero), subscribers are not forced to unsubscribe automatically. The default value is 20. -->
            
    <session-timeout>20</session-timeout>
          
    </network>
        
    </properties>
      
    </destination>

      3.客户端调用
      <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#FFFFFF" layout="absolute">
        
    <mx:Script>
            
    <![CDATA[
                import mx.utils.ObjectUtil;
                import mx.rpc.events.FaultEvent;
                import mx.controls.Alert;
                import mx.rpc.events.ResultEvent;        
                import mx.messaging.events.MessageEvent;        
                import mx.managers.CursorManager;
                private function logIn():void
                {        
                    CursorManager.setBusyCursor();
                    loginRO.logout();
                    loginRO.setCredentials(username.text, password.text);
                    loginRO.SecureOperation();
                }
                
                /*Call logout*/
                private function logOut():void
                {        
                    loginRO.logout();
                    appViews.selectedChild = loginView;
                }
                
                private function loginResult(event:ResultEvent):void {
                    
                    var result:Boolean = event.result as Boolean;
                    appViews.selectedChild = secureView;
                    consumer.setCredentials(username.text, password.text);
                    consumer.subscribe();    
                    CursorManager.removeAllCursors();
                }
                
                private function loginFault(event:FaultEvent):void{
                    Alert.show( ObjectUtil.toString(event.fault), "Authentication failed" );
                }
                
                
                public function messageHandler(event:MessageEvent):void
                {        
                    var body:Object = event.message.body;
                    output.text = body.userId + ": " + body.msg;
                }   
                
                private function toggle():void
                {
                    feedService.toggle();
                }
                
                private function onFeedResult(event:ResultEvent):void
                {
                    
                }
                
                private function onfault(event:Event):void
                {
                    trace(event.toString());
                }
            
    ]]>
        
    </mx:Script>    
        
    <mx:RemoteObject id="loginRO" destination="fluorine" source="FluServiceLibrary.MyLoginService" >
            
    <mx:method name="SecureOperation" result="loginResult(event)" fault="loginFault(event)" />
        
    </mx:RemoteObject>
        
    <mx:RemoteObject id="feedService" destination="fluorine" source="FluServiceLibrary.DateFeedService">
            
    <mx:method name="toggle" result="onFeedResult(event)" fault="onfault(event)"/>
        
    </mx:RemoteObject>
        
    <mx:Consumer id="consumer" destination="datafeed" message="messageHandler(event)"/>
        
        
    <mx:ViewStack id="appViews" width="100%" height="100%">
            
    <!--login view-->
            
    <mx:HBox horizontalAlign="center" verticalAlign="middle" id="loginView" width="100%" height="100%">
                
    <mx:Panel title="Login" id="loginPanel" horizontalScrollPolicy="off" verticalScrollPolicy="off">
                    
    <mx:Form id="loginForm">
                        
    <mx:FormItem label="Username:">
                            
    <mx:TextInput id="username"/>
                        
    </mx:FormItem>
                        
    <mx:FormItem label="Password:">
                            
    <mx:TextInput id="password"  displayAsPassword="true"/>
                        
    </mx:FormItem>
                    
    </mx:Form>
                    
    <mx:ControlBar>
                        
    <mx:Spacer width="100%" id="spacer1"/>
                        
    <mx:Button label="Login" id="loginButton"
                                   enabled
    ="{(username.text.length == 0 || password.text.length == 0) ? false : true}"
                                   toolTip
    ="{loginButton.enabled == true ? 'Click to submit' : 'Enter username and password'}"
                                   click
    ="logIn()" />
                    
    </mx:ControlBar>
                
    </mx:Panel>
            
    </mx:HBox>
            
    <!--end loginView-->
            
            
    <!--secure area view, made visible after a successful login-->
            
    <mx:HBox id="secureView" width="100%" height="100%">
                
    <mx:Box x="20" y="20">
                    
    <mx:VBox>
                        
    <mx:HBox>
                            
    <mx:Button label="Toggle Date Feed" click="toggle()"/>
                            
    <mx:Label text="DateFeed" />
                        
    </mx:HBox>
                    
    </mx:VBox>
                
    </mx:Box>
                
    <mx:Label id="output" text="..." />
            
    </mx:HBox>
            
    <!--end secure area view-->
        
    </mx:ViewStack>
        
        
    </mx:Application>

  • 相关阅读:
    Airodump-ng——Description
    kali 2.0 — WIFI——commands
    国外整理的一套在线渗透测试资源合集
    A collection of android security related resources.
    cBPM
    cBPM-android
    CentOS7 安装 gcc-4.9.0
    install Android Studio 1.3 —— VM Acceleration on Linux
    08嵌入式—蔺小会—初创公司需要怎样的管理模式?
    Nodejs开发框架Express4.x开发手记
  • 原文地址:https://www.cnblogs.com/csharponworking/p/2084595.html
Copyright © 2011-2022 走看看