Простой удаленный общий объект с Red5 Flash Server - PullRequest
4 голосов
/ 10 октября 2009

Я пытаюсь создать простой чат-клиент, использующий медиа-сервер red5, но у меня, похоже, небольшой сбой. Я создаю общий объект на стороне сервера, и, похоже, он успешно создается. Однако, когда я делаю изменения в объекте через клиента (введите сообщение), происходит событие SYNC, но содержимое в общем объекте остается пустым. Я подозреваю, что я делаю что-то не так на Java, совет?

Результаты консоли:

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);
            }
        }
    }
}

Ответы [ 2 ]

5 голосов
/ 28 октября 2009

вам не нужно ничего писать на стороне сервера, чтобы вести чат в as3 и red5;

вот пример для вас чат, в котором он работает, и он записан в виде as3 / flex3

0 голосов
/ 06 июня 2010

Да, возможно создать чат без написания кода на стороне сервера, но я не понимаю, как кто-то может контролировать отключение пользователей или использовать списки пользователей при синхронизации, в любом случае, возвращаясь к теме, возможно, у вас есть проблема с разрешениями dir, поэтому попробуйте запустить red5 как root / admin один раз, просто чтобы проверить, работает ли он, нужно ли создать в вашей системе пользователя (с правильными правами на запись), а затем запустить red5, используя этого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...