rso между flex и red5.Я могу создать, но не могу читать - PullRequest
0 голосов
/ 01 октября 2011

так что я все еще застрял на этом, что я могу создать удаленный общий объект, но не могу читать, пока я уведомлен об изменениях.Я использую транковую версию Red5 и Flex 4.0 с Flash Builder.В отладке я вижу, что changeLog имеет имя измененного значения rso, но сам объект имеет неопределенное значение.

В настоящее время я работаю на локальной машине Windows, но попробовал все на сервере 10.04 Ubuntu и получил те же результаты.я могу подключиться к комнате, создать общий объект, и все клиенты будут уведомлены об этом, но только пользователь, который изменил значение rso, может прочитать значение, которое один раз, а другие просто получают неопределенное значение.У кого-нибудь есть опыт решения этой проблемы?Я был бы очень признателен за любую помощь, потому что это сводит меня с ума, я нахожусь в течение примерно трех недель, прочитал все учебные пособия по RSO и не могу найти какое-либо решение.Я пробовал с постоянными и непостоянными, инициированными сервером и клиентом, но все время получаю одинаковые результаты.

есть мой код на стороне клиента:

protected function application1_creationCompleteHandler(event:FlexEvent):void {
                var room_id:Number = vars("room");
                connection = new NetConnection();
                connection.connect("rtmp://127.0.0.1/video/" + room_id);
                connection.addEventListener(NetStatusEvent.NET_STATUS, onConnected);
                connection.client = this;
            }

private function onConnected(event:NetStatusEvent) : void {
                if(event.info.code == "NetConnection.Connect.Success") {

                    so = SharedObject.getRemote("video", connection.uri, true);
                    so.addEventListener(SyncEvent.SYNC, onSync);
                    so.connect(connection);


                } else {
                    Alert.show("Unsuccessful Connection", "Information");
                }
private function onSync(event:SyncEvent):void {
          if(so.data["video"] != undefined)
             Alert.show(so.data["video"].toString(), "Information");
            }

onна стороне сервера у меня есть:

ISharedObject so;
    IServiceCapableConnection iconn;
    public static IScope iroom;

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

        iconn = (IServiceCapableConnection)conn;

        if (!super.connect(conn, scope, params)) {
            return false;
        }

        System.out.println("Connected True");

        return true;
    }

    /** {@inheritDoc} */
    @Override
    public void disconnect(IConnection conn, IScope scope) {
        super.disconnect(conn, scope);
    }
 @Override
    public boolean roomStart(IScope room) {
        if (!super.roomStart(room))
            return false;
        createSharedObject(room, "video", true);
        so = getSharedObject(room, "video");
        System.out.println("Room created succesfully");
        ISharedObjectListener listener = new SOEventListener();
        so.addSharedObjectListener(listener);

        return true;
    }

со слушателем на стороне клиента, я не могу сделать вывод в консоли и увидеть, что rso изменилось и каково текущее значение, хотя я проверяю файл rso постоянства на сервере red5 ипохоже, что все работает, и единственное, чего не хватает, так это возможности прочитать ценность для всех клиентов.Я буду признателен за любую помощь.Спасибо

1 Ответ

0 голосов
/ 04 октября 2011

большая проблема кажется не такой большой. Проблема была с кодировкой, которая по умолчанию является AMF3 начиная с AS3, и все, что мне нужно сделать, просто изменить кодировку на AMF0.

connection = new NetConnection();
connection.objectEncoding = ObjectEncoding.AMF0;
connection.connect("rtmp://127.0.0.1/video/" + room_id);

Надеюсь, что это кому-нибудь поможет, потому что почему-то в сети не так много информации о подобных вещах.

...