2016-05-02 21 views
0

asn.1文法を書くことを学んでいます。私はasn.1が配列の配列を書くための機能を提供してくれることを望みます。それは何度も繰り返された同じタイプの構造のパターンを持ちますが、軽微な修正が加えられています。私はASN.1がこの大量の文法を書くのではなく、いくつかの文法に合わせて配列のような文法を書くことを許可するのだろうかと思います。asn.1を使った構造体の配列

gamePlayer { 
gamePlayer { 
    gamePlayer type: user (0) 
    playerDetail { 
     name: player_1 
     team: red 
     ip: 10.3.3.1 
     membership: level_2 
    } 
} 
gamePlayer { 
    gamePlayer type: user (0) 
    playerDetail { 
     name: player_2 
     team: blue 
     ip: 10.3.3.2 
     membership: level_4 
    } 
} 
gamePlayer { 
    gamePlayer type: ai (1) 
    playerDetail { 
     name: ai_1 
     team: red 
     bot: bikeBot 
    } 
} 
gamePlayer { 
    gamePlayer type: ai (1) 
    playerDetail { 
     name: ai_2 
     team: blue 
     bot: bikeBot 
    } 
} 
gamePlayer { 
    gamePlayer type: ai (1) 
    playerDetail { 
     name: ai_3 
     team: blue 
     bot: carBot 
    } 
} 

}

+0

これは、ASN.1値記法に似ています。いただきました。この値に対応するタイプ。また、ASN.1は配列も構造も持っていません。あなたはSEQUENCE OFとSEQUENCEを意味しますか? – Henry

+0

@Henry:ホープ配列られるすべてのサブパラメータが 'players'と' ai'のすべてのタイプのために同じである場合に有用です。しかしここでは、「名前」と「チーム」のみがすべて共通です。他のパラメータは、それがplayer'または '' ai'だ天候次第です。 – Gopi

答えて

1

IはgameplayerタイプにENUMERATEDを使用します。 playerDetailの相違点はOPTIONALのメンバーで解決できます。ゲームプレイヤーの配列はSEQUENCE OFによって解決されます。

これは、ASN.1モジュールの一例である(それが正しければ、私がテストしていない) GamePlayerModule

DEFINITIONS IMPLICIT TAGS ::= BEGIN 

GamePlayers ::= SEQUENCE OF GamePlayer 

Gameplayer ::= SEQUENCE { 
    type ::=   ENUMERATED 
         { 
          user (0) 
          ai (1) 

         }, 
    playerDetail  PlayerDetail 
} 

PlayerDetail ::= SEQUENCE { 
    name   UTF8STRING, 
    team   UTF8STRING, 
    ip   [0] UTF8STRING OPTIONAL, 
    membership [1] UTF8STRING OPTIONAL, 
    bot   [2] UTF8STRING OPTIONAL 
} 

END 
1

ASN.1でこの猫を肌する方法はたくさんあります。一つの方法:

Player ::= SEQUENCE { 
    name UTF8String, 
    team UTF8String, 

    humanOrAI CHOICE { 
     human [0] HumanInfo, 
     ai [1] AIInfo 
    } 
} 

HumanInfo ::= SEQUENCE { 
    ip   OCTET STRING (SIZE (4)) 
    membership UTF8String 
} 

AIInfo ::= ENUMERATED { bikeBot, carBot } 

CHOICEの使用は、おそらくあなたが一緒に、このようなアイテムをミックスできるようにする適切な方法です。

ほとんどのプロトコルでIPアドレスがOCTET STRINGと指定されているのが一般的ですが、実装の詳細は少しですが、これは人間がAIプレイヤーを引き継ぐようにしたい場合にどうなりますか?

は、ASN.1を学ぶためにオンラインで利用可能なリソースの良いセットがあります。迅速な何かのためthis tutorialを参照してください。 Larmouth'sおよびDubuisson'sの書籍もオンラインです。ラウスはよりアクセスしやすいですが、Dubuissonはおそらくもっと徹底しています。