У меня есть две (+) системы в локальной сети, на которых запущено приложение AIR, которое должно отправлять / получать обновленные позиции и другие события между собой. В настоящее время я использую сервер сокетов на основе AIR один из экземпляров.
Отлично работает AMF и строгая типизация. Однако не синхронизируется между клиентами.
В моем примере ниже clientA пытается отправить пакет AMF на clientB . События SOCKET_DATA запускаются, как и ожидалось, на сервере синхронно с мышью, однако данные, которые clientB получает очень быстро, не синхронизируются и события теряются.
Хорошо, если случайное событие отбрасывается, однако мне нужно знать, что самое последнее событие SOCKET_DATA содержит самые последние данные. Вместо этого он просто содержит все более старые данные.
Я разместил тестовую сборку (с исходным кодом) здесь:
http://dev.marcelray.com/send/SocketTest.zip
Любые идеи или мысли очень ценятся.
Спасибо!
Фрагменты кода:
clientA writeObject: (на MOUSE_MOVE для проверки большого количества событий)
protected function stage_mouseMoveHandler ( pEvent : MouseEvent ) : void
{
var lOutgoingPacket : DataPacket = new DataPacket( pEvent.stageX , pEvent.stageY );
clientAStatusText.appendText( "Sending packet: " + lOutgoingPacket + "\n" );
clientA.writeObject( lOutgoingPacket );
}
обработчик clientB SOCKET_DATA:
private function clientB_socketDataHandler ( pEvent : ProgressEvent ) : void
{
var lIncomingPacket : DataPacket = DataPacket( clientB.readObject() );
clientBStatusText.appendText( "Received packet: " + lIncomingPacket + "\n" );
}
Обработчик сервера SOCKET_DATA:
private function server_socketDataHandler ( pEvent : ProgressEvent ) : void
{
var lSourceClient : Socket = pEvent.target as Socket;
var lIncomingObject : * = lSourceClient.readObject();
// Send message to all connectedClients
for each ( var iClient : Socket in connectedClients )
{
// Don't send to client who sent the original command
if ( iClient == lSourceClient )
continue;
iClient.writeObject( lIncomingObject );
iClient.flush();
}
}