【问题标题】:Shared Objects Send Method()共享对象发送方法()
【发布时间】:2013-05-09 21:51:36
【问题描述】:

Adobe 文档中似乎有关于使用共享 object.send() 的错误。我正在尝试对所有客户端执行发送方法。

我从 Adob​​e 复制了客户端和服务器端代码,但无法调用该函数。 这是我在输出中的编译错误

Line 31 1119: Access of possibly undefined property doSomething through a reference with static type flash.net:SharedObject.

任何建议我如何解决这个问题给 as3 新手。请问谁能帮帮我?

var nc:NetConnection = new NetConnection();

nc.connect("rtmfp://localhost/submitSend");

nc.addEventListener(NetStatusEvent.NET_STATUS, netHandler);

function netHandler(event:NetStatusEvent):void{
    switch(event.info.code){
        case "NetConnection.Connect.Sucess":
        trace("Connecting...");
        break;

        case "NetConnection.Connect.Failed":
        trace("Unable to connect up");
        break;

        case "NetConnection.Connect.Rejected":
        trace("Whoops");
        break;
    }
}

var so:SharedObject = SharedObject.getRemote("mySo", nc.uri, true);

so.connect(nc);

so.doSomething = function(str) {
    // Process the str object.
};

服务器端:

var so = SharedObject.get("mySo", true);
so.send("doSomething", "This is a test");

【问题讨论】:

  • 您能否提供一个链接到您从中获取此代码的页面?
  • 另外,您应该仅在连接到服务器后才连接共享对象

标签: actionscript-3 shared-objects


【解决方案1】:

正如我在之前的评论中所说,欢迎您提供指向您所指文档的链接,以帮助人们帮助您...

这里已经有几点需要说明:

  • 您应该在调用 connect() 之前添加您的事件侦听器。
  • 只有在收到 NetConnection.Connect.Success 事件后才应连接共享对象(顺便说一下,您的示例中有此名称的拼写错误)
  • 您应该将类​​实例设置为共享对象的客户端。

我不确定所有这些都能解决你的问题,但你可以试试这个:

var nc:NetConnection = new NetConnection();

private function netHandler(event:NetStatusEvent):void
{
    switch(event.info.code)
    {
        case "NetConnection.Connect.Success":
        {
            trace("Connecting...");
            connectSharedObject();
            break;
        }
        case "NetConnection.Connect.Failed":
        {
            trace("Unable to connect up");
            break;
        }
        case "NetConnection.Connect.Rejected":
        {
            trace("Whoops");
            break;
        }
    }
}

private function connectSharedObject():void
{
    var so:SharedObject = SharedObject.getRemote("mySo", nc.uri, true);
    so.client = this;
    so.connect(nc);
}

public function doSomething(str:String):void
{
    // Process the str object.
}

nc.addEventListener(NetStatusEvent.NET_STATUS, netHandler);
nc.connect("rtmfp://localhost/submitSend");

【讨论】:

  • 谢谢你。感谢帮助和 cmets。抱歉,这是链接livedocs.adobe.com/flashmediaserver/3.0/hpdocs/… 我测试了代码并很好地连接到了服务器。这听起来像是一个愚蠢的问题。但是,我是否应该在输出或管理控制台的实时日志中收到关于字符串消息的任何通知或响应?因为我不确定我发送的字符串消息是成功还是失败..谢谢
  • 我现在无法检查,但我认为如果调用了客户端方法,您对so.send("doSomething", "This is a test"); 的服务器端调用应该返回true,否则返回false
  • 抱歉打扰了..但是我稍微修改了我的服务器端代码,现在看起来像这样 application.onConnect = function(client){ trace("In onConnect");应用程序.acceptConnection(客户端);所以 = sharedObject.get("foo", true); so.send("doSomething", "这是一个测试");服务器似乎没有调用 sharedobject.send() 因此该方法没有被调用到连接的客户端。在客户端,我添加了 onSync 处理程序以尝试调用与共享对象的连接以调用 so.send 但这不成功。总有一天我会找到方法的!它不是火箭科学,哈哈
  • 如果send()调用是在客户端连接上执行的,那么我认为你的客户端方法没有被调用是正常的,因为客户端还没有连接共享对象!我没有使用 FMS 版本 3,但我提供的代码应该可以工作!您可以在 onConnect 处理程序中使用 setInterval() 稍后执行调用,并为客户端连接提供时间
  • 明白了,感谢您的帮助!这就是我需要知道的全部内容。
猜你喜欢
  • 1970-01-01
  • 2011-11-24
  • 2015-12-04
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多