2016-07-21 17 views
1

Я использую SharedObject для создания простого приложения чата. SharedObject был создан отлично, и мое приложение могло получать событие синхронизации, когда другие клиенты обновляют данные на SO. Однако проблема возникает, когда мое приложение пытается сохранить данные в SO, чтобы сигнализировать другим клиентам. Я подтвердил, что данные были изменены, используя следующий код:SharedObject: может получать событие от других клиентов, но никогда не запускает событие после сохранения данных

trace("before:"+so.data.chatMessage); 
so.data.chatMessage = msg.text; 
trace("after:"+so.data.chatMessage); 

Он сказал «перед: аЬс» и «после того, как: DEF». К сожалению, ни одно из клиентов не получило событие синхронизации после того, как данные о SO изменились, включая клиента, который сам изменил данные. Таким образом, это означает, что этот клиент может получить сообщение другого клиента, но само сообщение никогда не выйдет.

Кто-нибудь видел такую ​​проблему раньше? Спасибо, Джек

+0

Вы использовали 'so.flush()'? – Vesper

+0

Я этого не знал. Вызов so.flush привел к ошибке «Ошибка: ошибка # 2130: невозможно слить SharedObject». Однако он не распечатывал внутреннюю ошибку. Поэтому, похоже, проблема в том, что флеш не может быть успешным ... Любая идея, как это может произойти? Благодарю. –

+0

@Vesper, BTW, я создал SO, используя getRemote, вместо getLoal, мне еще нужно вызвать so.flush()? Я прочитал документацию, и мне было не очень ясно, был ли вызов flush() для обоих getLocal() и getRemote() SO. –

ответ

2

Вы должны назвать flush():

If you don't use this method, Flash Player writes the shared object to a file when the shared object session ends — that is, when the SWF file is closed, when the shared object is garbage-collected because it no longer has any references to it, or when you call SharedObject.clear() or SharedObject.close() .

или

использование setProperty() изменить свойство:

Updates the value of a property in a shared object and indicates to the server that the value of the property has changed.

Как изменить только свойство data объекта , нет уведомления о том, что это значение изменилось.

Calling so.flush() resulted in "Error: Error #2130: Unable to flush SharedObject." It did not print an internal error, though. So it seems the problem was the flush couldn't be successful... Any idea how could happen?

Взгляните на этот другой вопрос:

Error #2130 Unable to flush sharedObject

+0

Это правда, если я создал SO с помощью getRemote()? Я назвал flush() и получил «Error: Error # 2130: Не удалось сбросить SharedObject». –

+0

@JackX. Я отредактировал свой ответ, чтобы включить другое предложение. – null

+0

Работает метод setProperty()! Я потратил пару часов на это, и ты спас меня. Спасибо чувак! –