2012-05-21 30 views
2

我使用FMS(rtmfp)连接到网络组。我可以连接到网络组(recheve NetStatusEvent“NetGroup.Connect.Success”),但仅此而已。我无法发布任何内容或看到有人加入了Netgroup,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);   
} 

回答

1

您需要在交换机组检查“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( “文本”),当你按发送按钮。

+0

这是我的问题,我不能接受任何与NetGroup事件。我收到的唯一事件是NetGroup.Connect.Success。当我发布消息到网络组时,没有人收到任何事件。 –

+0

你在开关组中听它吗? (加入我的答案) –

+0

嗯...抱歉,没有仔细检查你的代码。有你的发布方法。对不起,我不知道为什么它不追踪它:( –

1

这可能是您选择发布消息的位置的问题。发布来自Connect.sucess,所以邻居没有连接到对等体。该消息只有在邻居连接后才会发布给其他对等方。

0

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

要收到post()消息,您需要监听“NetGroup.Posting.Notify”。您创建的消息是简单地称为的消息,附带两条信息。此时您可以将消息打印出来并输出到文本字段。

我张贴了一些示例代码(根据你写的内容而不用开箱即可)。您可以看到,我们正在等待,直到我们可以在发布帖子()之前确认与群组中的邻居的连接。

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; 
    }    
} 

有很多这些类可以为你做,所以继续下去。你不仅限于短信,但你可以从字面上传递任何对象。流数据可以被处理,但是有特定的类。

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

GroupSpecifier

NetStatusEvent