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

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 に答える
1

メッセージを投稿するために選択した場所に問題がある可能性があります。投稿は Connect.sucess からのものであるため、ネイバーはピアに接続されていません。メッセージは、ネイバーが接続した後でのみ、他のピアにポストされます。

于 2012-08-08T10:40:45.113 に答える
0

求めているタスクを完了するには、「NetGroup.Neighbor.Connect」が聞こえたら post() を起動する必要があります。グループに接続するときに post() を起動すると、隣人に接続する前に post() を起動する可能性があります。グループとグループの隣人への接続は同時に発生しません。P2P 接続は、メッセージがグループ全体に伝播できるように、近隣が利用可能であるという確認に依存しています。

post() メッセージを受信するには、「NetGroup.Posting.Notify」をリッスンする必要があります。作成したメッセージは、2 つの情報が添付された単純にmessageと呼ばれるオブジェクトです。この時点で、メッセージを取得してテキスト フィールドに出力できます。

あなたが書いたものに基づいて、いくつかのサンプルコードを投稿しました(そのままでは機能しません)。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;
    }               
}

これらのクラスがあなたのためにできることはたくさんあるので、それを続けてください。テキスト メッセージだけに限定されず、文字通り任意のオブジェクトを渡すことができます。ストリーミング データを処理できますが、そのための特定のクラスがあります。

私が参照し、さらに役立つリンク:

グループ指定子

NetStatusEvent

于 2013-12-11T06:37:30.190 に答える