zoukankan      html  css  js  c++  java
  • FluorineFx 之Chat

    1,Asp.net web 服务端需要修改的地方为:
    WEB-INF/flex/messaging-config.xml
    增加内容:
       <destination id="chat">
            <adapter ref="messagingAdapter"/>
            <properties>
                <network>
                    <session-timeout>20</session-timeout>
                </network>
            </properties>
            <channels>
                <channel ref="my-rtmp"/>
            </channels>
        </destination>
        
    2,在flex 端调用的方法如下
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*">
        
        <mx:Script>
            <![CDATA[
                import mx.utils.ObjectUtil;
                import mx.rpc.events.FaultEvent;
                import mx.rpc.events.ResultEvent;
                
                import mx.messaging.*;
                import mx.messaging.messages.*;
                import mx.messaging.events.*;
                import mx.controls.*;
                
                private function login():void
                {
                    loginRO.setCredentials(username.text, password.text);
                    //The following call will run MyLoginCommand on the backend
                    //>In this sample the authentication with an empty password will fail
                    loginRO.Login();
                }
                
                private function loginResult(event:ResultEvent):void {
                    var result:Boolean = event.result as Boolean;
                    appViews.selectedChild = chatView;
                    
                    consumer.setCredentials(username.text, password.text);
                    consumer.subscribe();            
                }
                
                private function loginFault(event:FaultEvent):void
                {
                    //logout otherwise next connect attempt will fail
                    loginRO.logout();
                    Alert.show( event.fault.faultString, "Authentication failed" );
                }        
                
                private function logout():void
                {
                    //first unsubscribe then logout
                    consumer.unsubscribe();
                    loginRO.logout();
                    consumer.logout();
                    appViews.selectedChild = connectView;
                }
                
                private function messageHandler(event:MessageEvent):void
                {
                    ta.text += event.message.body.userId + ": " + event.message.body.text + "\n";                
                }
                
                public function sendMessage():void
                {
                    var message:AsyncMessage = new AsyncMessage();
                    message.body = {userId: username.text, text: msg.text}
                    producer.send(message);
                    msg.text="";
                }
                
                private function messagefaultHandler(event:MessageFaultEvent):void
                {
                    // Handle fault event.
                    Alert.show(event.faultString, "Error");
                }
                
            ]]>
        </mx:Script>
        
        <mx:Consumer id="consumer" destination="chat" message="messageHandler(event)" fault="messagefaultHandler(event)"/>
        <mx:Producer id="producer" destination="chat" fault="messagefaultHandler(event)"/>
        <mx:RemoteObject id="loginRO" destination="fluorine" fault="loginFault(event)" source="FluServiceLibrary.MyLoginService" result="loginResult(event)">
            <mx:method name="Login"/>
        </mx:RemoteObject>
        
        <mx:ViewStack id="appViews" width="100%" height="100%" creationPolicy="all">
            <!--connectView-->
            <mx:HBox horizontalAlign="center" verticalAlign="middle" id="connectView" width="100%" height="100%">
                <mx:Panel title="Connect" id="connectPanel" horizontalScrollPolicy="off" verticalScrollPolicy="off">
                    <mx:Form id="connectForm">
                        <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="Connect" id="connectButton"
                                   enabled="{(username.text.length == 0 ) ? false : true}"
                                   toolTip="{connectButton.enabled == true ? 'Click to connect' : 'Enter username and password'}"
                                   click="login()"/>
                    </mx:ControlBar>
                </mx:Panel>
            </mx:HBox>
            <!--end connectView-->
            <mx:HBox id="chatView" width="100%" height="100%">
                <mx:Panel title="Chat" width="100%" height="100%">
                    <mx:TextArea id="ta" width="100%" height="100%"/>
                    <mx:ControlBar>
                        <mx:TextInput id="msg" width="100%" enter="sendMessage()"/>    
                        <mx:Button label="Send" click="sendMessage()"/>
                        <mx:Button label="Logout" click="logout()"/>
                    </mx:ControlBar>    
                </mx:Panel>
            </mx:HBox>
        </mx:ViewStack>
    </mx:Application>
    3,登录成功之后进行会话

    源码:

  • 相关阅读:
    zookeeper
    消息中间件介绍
    Java实现动态代理的两种方式
    深入理解Java内存模型
    消息中间件(一)MQ详解及四大MQ比较
    synchronized关键字详解及分析锁升级过程
    JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)
    分布式通信-tcp/ip socket
    技术点
    大众点评 cat
  • 原文地址:https://www.cnblogs.com/csharponworking/p/2079186.html
Copyright © 2011-2022 走看看