2

我正在使用 FMS (rtmfp) 连接到网络组。我可以连接到网络组(接收 NetStatusEvent "NetGroup.Connect.Success"),但仅此而已。我无法发布任何内容或看到有人加入了网络组,没有触发 NetStatusEvent。我错过了什么吗?

这是代码:

public function connect(url:String):void {                  
    _nc = new NetConnection();
    _nc.client = this;
    _nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

    _nc.connect(url);   
}

private function netStatusHandler(event:NetStatusEvent):void {
    switch (event.info.code){
        case "NetConnection.Connect.Success":               
            createGroup();
            break;              
        case "NetGroup.Connect.Success":                    
            //post msg to the group
            var message:Object = new Object;                    
            message.text = "Hello";                 
            message.sender = _nc.nearID;                    
            _netGroup.post(message);
            break;
        default:                    
            trace("event.info.code: " + event.info.code);           
            break;
    }               
}

private function createGroup():void {
    _groupSpecifier = new GroupSpecifier("test_group"); 
    _groupSpecifier.postingEnabled = true; 
    _groupSpecifier.multicastEnabled = true;            
    _groupSpecifier.serverChannelEnabled = true; 

    _netGroup = new NetGroup(_nc, _groupSpecifier.groupspecWithAuthorizations()); 
    _netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);        
}   
4

3 回答 3

1

您选择发布消息的位置可能存在问题。发布来自 Connect.sucess ,因此邻居未连接到对等方。只有在邻居连接后,该消息才会发布给其他对等方。

于 2012-08-08T10:40:45.113 回答
1

您需要在 switch 块中检查“NetGroup.Posting.Notify”,并使用 NetGroup 类的 post 方法!

private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code){
    case "NetConnection.Connect.Success":               
        createGroup();
        break;              
    case "NetGroup.Connect.Success":                    
        break;
    case "NetGroup.Posting.Notify" :
        receiveMessage(event.info.message);
        break;

    default:                    
        trace("event.info.code: " + event.info.code);           
        break;
}               

}

然后在receiveMessage函数中:

private function receiveMessage(message:Object):void
    {   
        trace(message.text)
    }

最后是发送功能:

private function sendMessage(txt:String):void
    {
        var message:Object = new Object();
        message.text = txt;

        netGroup.post(message);
    }

现在您可以在按下发送按钮时调用 sendMessage("text")。

于 2012-05-21T10:39:24.823 回答
0

为了完成您所询问的任务,您应该在听到“NetGroup.Neighbor.Connect”时触发 post()。如果您在连接到组时立即触发 post(),那么您可能会在连接到邻居之前触发它。将您连接到群组和群组邻居不会同时发生。P2P 连接依赖于对邻居可用的确认,以便消息可以在整个组中传播。

要接收 post() 消息,您需要监听“NetGroup.Posting.Notify”。您创建的消息是一个简单地称为消息的对象,其中附加了两条信息。此时,您可以获取消息并将其打印到文本字段。

我根据您编写的内容发布了一些示例代码(不会开箱即用)。您可以看到我们正在等待,直到我们可以确认与组内的邻居的连接,然后才发出 post()。

private function netStatusHandler(event:NetStatusEvent):void {
    switch (event.info.code){
        case "NetConnection.Connect.Success":               
            createGroup();
            break;              
        case "NetGroup.Connect.Success":                    
            connected = true;
               break;

        case "NetGroup.Neighbor.Connect":
            //post msg to the group
               var message:Object = new Object;                    
               message.text = "Hello";                 
               message.sender = _nc.nearID;                    
               _netGroup.post(message);

        case "NetGroup.Posting.Notify":
            writeText(message.sender + ": " message.text);
        default:                    
               trace("event.info.code: " + event.info.code);           
               break;
    }               
}

这些课程可以为您做很多事情,所以请继续学习。您不仅限于短信,而且您可以从字面上传递任何对象。可以处理流数据,但有特定的类。

我引用的链接将进一步帮助您:

组说明符

网络状态事件

于 2013-12-11T06:37:30.190 回答