2015-08-14 2 views
0

как бы вы вызывали метод flex клиента из приложения в приложении red5-service-1.0.5-RELEASE.Red5 - Вызов методов клиента с сервера приложений не работает

and my jdk version is 1.8(64-bit).flex 4 ,as3 

package org.red5.demos; 

     import org.red5.server.adapter.ApplicationAdapter; 
     import org.red5.server.api.IConnection; 
     import org.red5.server.api.scope.IScope; 
     import org.red5.server.api.service.IServiceCapableConnection; 
     import org.red5.server.api.stream.IServerStream; 

     /** 
     * @author user 
     * 
     */ 
     public class Application extends ApplicationAdapter { 

      private IScope appScope; 
      private IServerStream serverStream; 

      @Override 
      public boolean appStart(IScope app){ 

       super.appStart(app); 
       System.out.println("hello demo start"); 
       appScope=app; 
       return true; 
      } 


      @Override 
      public boolean appConnect(IConnection conn,Object[]obj){ 

       IScope appScope=conn.getScope(); 

       System.out.println("appConnect"); 

       callient(conn); //appConnect and calling client method 

       return super.appConnect(conn, obj); 

      } 


      private void callient(IConnection conn){ 
       if(conn instanceof IServiceCapableConnection){ 
        System.out.println("connect to flash side");  
        ((IServiceCapableConnection) conn).invoke("yourFunctionInFlash"); // involing client side method ,but print "connect to flash side" 
       } 
      } 

    //disconnected 
      @Override 
      public void appDisconnect(IConnection conn){ 
        if(appScope==conn.getScope() && serverStream!=null){ 
         serverStream.close(); 
        } 
       super.appDisconnect(conn); 
      } 
     } 

и моя сторона гибкого кода, в моей демке ,, после подключения к приложению red5 сервера, информация NetStatus успех.

 <?xml version="1.0" encoding="utf-8"?> 
     <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx"       creationComplete="windowedapplication1_creationCompleteHandler(event)"> 


      <fx:Script> 
       <![CDATA[ 
        import mx.events.FlexEvent; 
        import mx.graphics.codec.JPEGEncoder; 

        private var cam:Camera; 
        private var netConnection:NetConnection; 
        private var netStream:NetStream;**strong text** 

        protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void 
        {    
         netConnection=new NetConnection(); 
         netConnection.client = { onBWDone: function():void{} };   
            netConnection.addEventListener(NetStatusEvent.NET_STATUS,connectionServerHandler);   
         netConnection.connect("rtmp://192.168.61.132/Hello","ssl");//connect to Hello App 
        } 

        public function sayHello(reponder:String):void{ 
         trace(reponder+"from server side "); 
        } 

        public function yourFunctionInFlash():void{ 
         trace("hello"); //get message from server side 
        } 

        private function connectionServerHandler(event:NetStatusEvent):void{ 
         trace(event.info.code); //it work success 
        } 

       ]]> 
      </fx:Script> 

     </s:WindowedApplication> 

but now ,flex side yourFunctionInFlash()method doesn't work,and server side also print "connect to flash side"message?>>> is any other I have missed? 


     thank you a lot . 

ответ

0

Метод yourFunctionInFlash должен быть определен в netConnection.client объекта. В вашем случае вы должны назначить netConnection.client = this. Также вызовите super.appConnect на задней стороне перед вызовом клиентского метода.

+0

Спасибо! Клиентский код: \t var c: Object = new Object(); \t \t \t \t \t \t c.yourFunctionInFlash = функция(): пустота \t \t \t \t { \t \t \t \t \t Alert.show ("Привет от вызова стороны сервера"); \t \t \t \t} \t \t \t \t netConnection.client = с; это работает – hy2015

Смежные вопросы