Я пытаюсь заставить приложение обмена сообщениями RTMP работать в FlashDevelop и FluorineFx . Я привык соединяться с NetConnection в FlexBuilder 3 с помощью некоторых хакерских атак, но я рисую пробел, заставляющий это работать с FlashDevelop.
У меня есть веб-сайт FluorineFx с файлом конфигурации \ WEB-INF \ flex \ services-config
<?xml version="1.0" encoding="utf-8" ?>
<services-config>
<services>
<service-include file-path="remoting-config.xml" />
<service id="message-service" class="flex.messaging.services.MessageService" messageTypes="flex.messaging.messages.AsyncMessage">
<!-- DO NOT CHANGE <adapters> SECTION-->
<adapters>
<adapter-definition id="messagingAdapter" class="FluorineFx.Messaging.Services.Messaging.MessagingAdapter" default="true"/>
</adapters>
<destination id="chat">
<adapter ref="messagingAdapter"/>
<properties>
<network>
<session-timeout>0</session-timeout>
</network>
</properties>
<channels>
<channel ref="my-rtmp"/>
</channels>
</destination>
</service>
<!-- <service-include file-path="data-management-config.xml" /> -->
</services>
<!-- Custom authentication -->
<security>
</security>
<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<!--<legacy-collection>true</legacy-collection> -->
</properties>
</channel-definition>
<channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel">
<endpoint uri="rtmp://{server.name}:1951" class="flex.messaging.endpoints.RTMPEndpoint"/>
</channel-definition>
</channels>
</services-config>
Мой файл client.swf работает в каталоге \ apps \ chat на моем сайте
В каталоге apps \ chat у меня есть файл App.config:
<configuration>
<!-- Application object. Specify a fully qualified type name for your handler -->
<application-handler type="testfx.AppHandler"/>
<!-- Filename generator for streams. Specify a fully qualified type name to use a custom generator-->
<streamFilenameGenerator type="FluorineFx.Messaging.Rtmp.Stream.DefaultStreamFilenameGenerator"/>
<consumerService type="FluorineFx.Messaging.Rtmp.Stream.ConsumerService"/>
<providerService type="FluorineFx.Messaging.Rtmp.Stream.ProviderService"/>
<streamService type="FluorineFx.Messaging.Rtmp.Stream.StreamService"/>
<!-- Manages creation, retrieval and update of remote shared objects-->
<sharedObjectService type="FluorineFx.Messaging.Rtmp.SO.SharedObjectService">
<persistenceStore type="FluorineFx.Messaging.Rtmp.Persistence.FileStore"/>
</sharedObjectService>
<!--
<sharedObjectSecurityService type=""/>
-->
</configuration>
Класс testfx.AppHandler имеет только метод echo:
public class AppHandler : ApplicationAdapter
{
public string echo(string msg)
{
return "Echo: " + msg;
}
}
У меня есть проект FlashDevelop со следующими библиотеками .swc
- framework.swc
- rpc.swc
- rpc_rb.swc
И файл main.as:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import mx.messaging.channels.*;
import mx.messaging.Consumer;
import mx.messaging.events.MessageEvent;
import mx.messaging.events.MessageFaultEvent;
import mx.messaging.Producer;
/**
* ...
* @author Nathan
*/
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var consumer:Consumer = new Consumer();
consumer.destination = "chat";
consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
consumer.addEventListener(MessageFaultEvent.FAULT, faultHandler);
consumer.subscribe();
var producer:Producer = new Producer();
producer.destination = "chat";
producer.addEventListener(MessageFaultEvent.FAULT, faultHandler);
producer.connect();
}
private function faultHandler(event:MessageFaultEvent):void
{
trace("fault");
}
private function messageHandler(event:MessageEvent):void
{
trace(event.message.body);
}
private function onNetStatus(event:NetStatusEvent):void
{
trace(event.info.code);
}
}
}
Текущее исключение, которое я получаю при запуске:
Исключение [Fault], информация = [MessagingError message = 'Назначение
'chat' либо не существует, либо у пункта назначения нет каналов
определены (и приложение не определяет каналы по умолчанию.) ']