2009-10-09 71 views
4

我想創建一個簡單的聊天客戶端使用red5媒體服務器,但我似乎有輕微的呃逆。我正在服務器端創建一個共享對象,並且它似乎正在成功創建它。但是,當我通過客戶機更改對象(鍵入消息)時,會觸發SYNC事件,但共享對象內的內容仍爲空。我懷疑我在java端做了什麼錯誤,有什麼建議?簡單的遠程共享對象與Red5 Flash服務器

控制檯結果:

Success! 

Server Message: clear 

Server Message: [object Object] 

Local message: asdf 

Server Message: change 

Server Message: [object Object] 

Local message: fdsa 

Server Message: change 

Server Message: [object Object] 

Local message: fewa 

Server Message: change 

Server Message: [object Object] 

服務器端:

package org.red5.core; 

import java.util.List; 

import org.red5.server.adapter.ApplicationAdapter; 
import org.red5.server.api.IConnection; 
import org.red5.server.api.IScope; 
import org.red5.server.api.service.ServiceUtils; 
import org.red5.server.api.so.ISharedObject; 
// import org.apache.commons.logging.Log; 
// import org.apache.commons.logging.LogFactory; 

public class Application extends ApplicationAdapter { 
    private IScope appScope; 
    // private static final Log log = LogFactory.getLog(Application.class); 

    /** {@inheritDoc} */ 
    @Override 
    public boolean connect(IConnection conn, IScope scope, Object[] params) { 

     appScope = scope; 
     createSharedObject(appScope, "generalChat", false); // Creates general chat shared object 

     return true; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public void disconnect(IConnection conn, IScope scope) { 
     super.disconnect(conn, scope); 
    } 

    public void updateChat(Object[] params) 
    { 
     ISharedObject so = getSharedObject(appScope, "generalChat"); // Declares and stores general chat data in general chat shared object 
     so.setAttribute("point", params[0].toString()); 
    } 
} 

客戶端:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.*; 
    import flash.net.*; 


    // This class is going to handle all data to and from from media server 
    public class SOConnect extends MovieClip 
    { 
     // Variables 
     var nc:NetConnection = null; 
     var so:SharedObject;   
     public function SOConnect():void 
     { 
     } 
     public function connect():void 
     {  
      // Create a NetConnection and connect to red5 
      nc = new NetConnection(); 
      nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
      nc.connect("rtmp://localhost/testChat"); 

      // Create a StoredObject for general chat 
      so = SharedObject.getRemote("generalChat", nc.uri, false);   
      so.connect(nc); 
      so.addEventListener(SyncEvent.SYNC, receiveChat)    
     } 

     public function sendChat(msg:String) 
     { 
      trace ("Local message: " + msg); 
      nc.call("updateChat", null, msg)      
     } 


     public function receiveChat(e:SyncEvent):void 
     {   
      for (var i in e.changeList) 
      { 
       trace ("Server Message: " + e.changeList[i].code) 
       trace ("Server Message: " + e.changeList[i]) 
      }      
     } 

     // Given result, determine successful connection   
     private function netStatusHandler(e:NetStatusEvent):void 
     { 
      if (e.info.code == "NetConnection.Connect.Success") 
      { 
       trace("Success!"); 
      } 
      else 
      { 
       trace("Failure!\n");  
       trace(e.info.code); 
      } 
     } 
    } 
} 
+1

我在想,red5簡單聊天不需要服務器端腳本,就像視頻流一樣 – Omu 2009-10-28 13:09:26

+0

red5共享對象教程在youtube上:http://www.youtube.com/watch?v=0MuLnMKYe9k&playnext=1&list = PL310F0481BCE4D194&設有= results_main – 2012-10-21 13:17:48

回答

0

是它的更多鈔票無需編寫服務器端代碼中創建一個聊天,但我不看怎麼有人可以控制用戶斷開連接或使用同步的用戶列表,反正回到主題也許你有一個dir權限問題,所以嘗試以root/admin身份運行red5一次,只是爲了檢查它是否有效,如果它應該在系統中創建一個用戶(具有正確的寫入權限),然後使用該用戶運行red5 。